在JavaScript的世界里,一切都是对象。但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串。如:
typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'
可见,number、string、boolean、function和undefined有别于其他类型。特别注意null的类型是object,Array的类型也是object,如果我们用typeof将无法区分出null、Array和通常意义上的object——{}。
1、一些类型使用规则:
(1)用parseInt()或parseFloat()来转换任意类型到number;
(2)用String()来转换任意类型到string,或者直接调用某个对象的toString()方法。需要注意,null和undefined没有toString()方法,而number调用它也会报错,所以还是别用toString了
(3)typeof操作符可以判断出number、boolean、string、function和undefined,其余的都是object类
(4)判断Array要使用Array.isArray(arr);
(5)判断null请使用myVar === null;
(6)判断某个全局变量是否存在用typeof window.myVar === 'undefined';
(7)函数内部判断某个变量是否存在用typeof myVar === 'undefined'
2、Date对象用来表示日期和时间,如:
var now = new Date();
now; // Wed Jun 24 2015 19:49:22 GMT+0800 (CST)
now.getFullYear(); // 2015, 年份
now.getMonth(); // 5, 月份,注意月份范围是0~11,5表示六月
now.getDate(); // 24, 表示24号
now.getDay(); // 3, 表示星期三
now.getHours(); // 19, 24小时制
now.getMinutes(); // 49, 分钟
now.getSeconds(); // 22, 秒
now.getMilliseconds(); // 875, 毫秒数
now.getTime(); // 1435146562875, 以number形式表示的时间戳
(1)JavaScript的Date对象月份值从0开始,牢记0=1月,1=2月,2=3月,……,11=12月
(2)now.toLocaleString():本地时间
(3)new.toUTCString():UTC时间
(4)时间戳:一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数
3、RegExp:正则表达式
4、在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。
(1)对象序列化为JSON:JSON.stringify(xiaoming, null, ' ')。注意,第三个参数是为了好看而传入了缩进
(2)第二个参数用于控制如何筛选对象的键值,如果我们只想输出指定的属性,可以传入Array,如JSON.stringify(xiaoming, ['name', 'skills'], ' ');
(3)第二个参数还可以传入一个函数,这样对象的每个键值对都会被函数先处理,如:
function convert(key, value) {
if (typeof value === 'string') {
return value.toUpperCase();
}
return value;
}
JSON.stringify(xiaoming, convert, ' ');
结果所有属性值都变成了大写。
(4)如果我们还想要精确控制如何序列化小明,可以给xiaoming定义一个toJSON()的方法,直接返回JSON应该序列化的数据:
var xiaoming = {
name: '小明',
age: 14,
gender: true,
height: 1.65,
grade: null,
'middle-school': '\"W3C\" Middle School',
skills: ['JavaScript', 'Java', 'Python', 'Lisp'],
toJSON: function () {
return { // 只输出name和age,并且改变了key:
'Name': this.name,
'Age': this.age
};
}
};
JSON.stringify(xiaoming); // '{"Name":"小明","Age":14}'
(5)JSON.parse():将JSON字符串反序列化为一个js对象,如:
JSON.parse('[1,2,3,true]'); // [1, 2, 3, true]
JSON.parse('{"name":"小明","age":14}'); // Object {name: '小明', age: 14}
JSON.parse('true'); // true
JSON.parse('123.45'); // 123.45
(6)JSON.parse()还可以接收一个函数,用来转换解析出的属性,如:
var obj = JSON.parse('{"name":"小明","age":14}', function (key, value) {
if (key === 'name') {
return value + '同学';
}
return value;
});
console.log(JSON.stringify(obj)); // {name: '小明同学', age: 14}