数据类型及判断的相关知识
目录
javascript高级-数据类型及判断的相关知识
数据类型的分类
基本数据类型(值类型)
- String
- Number
- Boolean
- Undefiend
- Null
- Symbol
const str = 'string'
const num = 123
const bool = true
const ud = undefined
const none = null
const sym = 'string'
const symbol = Symbol('this is current symbol type\'s description')
引用数据类型(对象类型)
- Object: 表示任意的对象
- Array: 一种特别的对象,特别在于其能够执行、调用
- Function: 一种特别的对象,属性是数字索引,内部的数据是有序的
数据类型的判断
typeof
返回值: String
var num = 123
console.log(typeof num) // 'number'
console.log(typeof num === 'number') // true
var num = NaN
console.log(typeof num) // 'number'
console.log(typeof num === 'number') // true
var ud = undefined
console.log(ud === undefined) // true
typeof 不能正确判断的数据类型是 Null Array
在 JavaScript 最初的实现中,JavaScript 中的值是由一个表示类型的标签和实际数据值表示的。对象的类型标签是 0。由于 null 代表的是空指针(大多数平台下值为 0x00),因此,null的类型标签也成为了 0,typeof null就错误的返回了"object"
var none = null
var arr = [1]
console.log(typeof none) // 'object'
console.log(typeof arr) // 'object'
typeof能够判断的数据类型有: Undefined
Number
String
Boolean
Object
Array
Symbol
===全等表达式
===
与==
的区别在于: ==
会对数据类型进行隐式转化后再进行比较,而===
则是严格的比较数据类型
、数值
以及引用对象的内存地址
console.log('1' == 1) // true
console.log('1' === 1) // false
var obj = {
name: 'Fitz'
}
var obj2 = obj
console.log(obj2 === obj) // true
===
能够判断的数据类型只有Null
与Undefined
,因为这两种数据类型的取值只有一个
let a = null
let b = undefined
console.log(a === null) // true
console.log(b = undefined) // true
===不能正确判断NaN
console.log(NaN === NaN) // false
var a = 'true' // Number(a) ==> NaN
var b = '123' // Number(b) ==> 123
var c = NaN // Number(c) ==> NaN
// isNaN()不能够准确判断一个数值是否是NaN
// 它的判断方法是使用Number()转换出的值是NaN就为true,否则就是false
console.log(isNaN(a)) // true
console.log(isNaN(b)) // false
console.log(isNaN(c)) // true
// Number.isNaN()能够严格准确的判断一个数是否等于NaN
console.log(Number.isNaN(a)) // false
console.log(Number.isNaN(b)) // false
console.log(Number.isNaN(c)) // true
instanceof
判断一个对象是否是另一个对象的实例,instanceof会沿着原型链进行查找,如果对象在另一个对象的原型链上就会返回true
console.log(a instanceof b) // a是否是b的实例对象
console.log(Array instanceof Object) // true
undefined 与 null 的区别
undefined表示变量已经申明但是还没有赋值
var arr
console.log(arr) // undefined
null表示申明变量并将其赋值为null(空),表示没有任何值
var name = null
console.log(name) // null
什么时候需要将变量赋值为null
将一个暂时无法确定值的对象赋值为null
var obj = null
// 后面这个对象的值确定了
obj = { name: 'Fitz' }
当函数(方法)、变量使用完成变成垃圾对象,可以被垃圾回收器回收时
function test () {
// do something...
}
test()
test = null
严格区分变量类型与数据类型
数据类型
基本数据类型
基本数据类型有前面说过的6种
- String
- Number
- Boolean
- Undefiend
- Null
- Symbol
对象类型
- Object
- Array
- Function
变量类型
变量类型的意思是这个变量究竟保存的是哪一种数据类型
基本类型
当变量被赋值的的数据是上面6种数据类型时,这个变量的类型就是基本类型,其保存的数据就是基本类型数据
引用类型
当变量被赋值的的数据是数组
、函数
等时,这个变量的类型就是引用类型,其保存的数据是指向数组
、函数
的内存地址值