一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(reference values)。
JS拥有七种数据类型,其中:
基本类型(值类型):Number
、String
、 Boolean
、Symbol
、Undefined
、Null
基本数据类型的值是按值访问的,变量是存放在栈内存(Stack)里。
var a = 1
var b = a
a = 10
console.log(b) // b = 1
引用类型:Object
Array、Function、RegExp属于Object
引用类型的值是按引用访问的,栈内存保存变量标识符和指向堆内存中该对象的指针,堆内存保存了对象的内容。
var a = { age: 1 }
var b = a
b.age = 2
console.log(a) // { age: 2 }
类型的检测
- typeof:经常用来检测一个变量是不是最基本的数据类型。
// 基本
typeof 123 // number
typeof '123' // string
typeof true // boolean
typeof Symbol() // symbol
typeof undefined // undefined
// 历史遗留bug,空指针对象
typeof null // object
// 引用
typeof /123/ig // object
typeof {} // object
typeof [] // object
typeof function(){} // function 函数是特殊的引用类型,所以能区分
- instanceof:用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上。
({}) instanceof Object // true
([]) instanceof Array // true
(/aa/g) instanceof RegExp // true
(function(){}) instanceof Function // true
变量计算-强制类型转换
- 字符串拼接
var a = 10 // number
var b = '10' // string
var c = a + b // '1010' string
- ==运算符
100 == '100' // true
0 == '' // true
null == undefined // true
- if语句
var a = 100
if(a) {} // a = 100 => true
var b = ''
if(b) {} // b = '' => false
- 逻辑运算
(10 && 0) // 0
('' || '123') // '123'
(!100) // false
(!0) // true
// 运用两个 !! 把一个值当做true或false
var a = 100
(!!a) // true
拓展: 什么时候用 == 和 ===
当if(obj.a == null){}判断时候,此时等于if(obj.a === null || obj.a === undefined){}
网友评论