一、数据类型
1.数据类型
原始类型:number string boolean null undefined
object类型(Function, Array, Date ...)
2.隐式转换
'37' - 7 // 30
字符串转数字,可以直接减0, 如'37' - 0; Number(); parseInt(); parseFloat();'37' + 7 // 377
== 与 ===
NaN 不等于 NaN
3.包装对象(wrapper object)
var a = 'string';
a.length // 6
a.length = 3;
a.length // 6
a.t = '6';
a.t // undefined
// 定义了一个基础类型a, 是一个简单的字符串,但是却有length属性
// 当你尝试以对象的方式去访问,a这个字符串的属性时候
// 原始类型的值会自动当作包装包装对象调用,即调用包装对象的属性和方法。
// 这时,JavaScript 引擎会自动将原始类型的值转为包装对象实例,并在使用后立刻销毁实例。
var v1 = new Number(123);
var v2 = new String('abc');
var v3 = new Boolean(true);
typeof v1 // "object"
typeof v2 // "object"
typeof v3 // "object"
v1 === 123 // false
v2 === 'abc' // false
v3 === true // false
4.类型检测
typeof
typeof 100 // "number"
typeof NaN // "number"
// 区分数字和NaN的方法
Number.isNaN = Number.isNaN || function(value) {
return typeof value === "number" && isNaN(value);
}typeof true // "boolean"
typeof aaa // "undefined"
typeof function(){} // "function"typeof 'aaa' // "string"
typeof [] // "object" ,Array.isArray(obj)
typeof {} // "object"
typeof null // "object", JavaScript 诞生以来便如此,
// 在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null 的类型标签是 0,typeof null 也因此返回 "object"。
instanceof 基于原型链判断
['1'] instanceof Array // true
['1'] instanceof Object // true
Object.prototype.toString
Object.prototype.toString.apply(function(){}) // "[object Function]"
Object.prototype.toString.apply([]) // "[object Array]"
Object.prototype.toString.apply(null) // "[object Null]"
Object.prototype.toString.apply(undefined) // "[object Undefined]"