数据类型,是前端开发工程师面试的必考基础题,必须牢牢记住
7种基本数据类型
- Number
- String
- Boolean
- Undefined
- Null
- Object,包含object、array、function,(非原始数据类型)
- Symbol(ES6新增)(非原始数据类型)
其中,前5项也被称作原始数据类型。 NaN, (Not a Number) 为number类型取值。
typeof() 函数
typeof(x) 用于获取变量x的类型 特殊的,以下typeof的取值需要记住
typeof(null) // 'object'
typeof([]) // 'object'
typeof({}) // 'object'
function a() {}
typeof(a) // 'function'
常考题 1:如何区分数组和对象类型?
由于数据、对象、null的typeof执行结果都为'object',因此不能用typeof函数区分
方法 1: 数组方法 Array.isArray()
Array.isArray([]) // true
Array.isArray({}) // false
Array.isArray(null) // false
方法 2: 原型链方法
Object.prototype.toString.call([]) // '[object Array]'
Object.prototype.toString.call({}) // '[object Object]'
Object.prototype.toString.call(null) // '[object Null]'
其余变量类型的 Object.prototype.toString.call() 调用结果与上述案例类似,可以自行尝试。
跨类型取值
布尔取值
Boolean([]) // true
Boolean({}) // true
Boolean(undefined) // false
Boolean(null) // false
Boolean(NaN) // false
Boolean(0) // false
Boolean(-1) // true
加减运算取值
- false、null:作 0
- true:作 1
- NaN、undefined:将得到 NaN
常考题 2: new String()和直接赋值有什么区别?
let a = new String('hello')
let b = 'hello'
- type取值区别
typeof(a) // 'object'
typeof(b) // 'string
- 逻辑判断是否等价
a == b // true
a === b // false
a + 'world' === b + 'world'
-
变量创建时间
new String(),在运行时创建,创建对象,并把对象的句柄返回给引用
直接赋值,在编译时创建