Javascript 基础(一)—— 数据类型

186 阅读1分钟

数据类型,是前端开发工程师面试的必考基础题,必须牢牢记住

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(),在运行时创建,创建对象,并把对象的句柄返回给引用

    直接赋值,在编译时创建