JS基本类型和引用类型

一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(reference values)。

JS拥有七种数据类型,其中:

基本类型(值类型)NumberStringBooleanSymbolUndefinedNull

基本数据类型的值是按值访问的,变量是存放在栈内存(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){}

你可能感兴趣的:(JS基本类型和引用类型)