JS汇总
数据类型
基本数据类型:字符串、数字、布尔、null、undefined、Symbol、bigInt
引用数据类型:Object,包括函数、数组、对象等
Symbol这种类型的对象永不相等,即便创建的时候传入相同的值也不相等。
BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值。
引用数据类型存储在堆内存中,但是会在栈内存中存一个指针。引用发图数据类型占据空间大、大小不固定
基本数据类型变量保存在栈内存中,因为基本数据类型占用空间小、大小固定,通过值来访问
引用数据类型会在栈中存储一个指针,这个指针指向堆内存空间中该实体的起始地址。
当解释器寻找引用值时,会先检索其在栈中的地址,取得地址后,从堆中获得实体。
类型转换
类型转换
隐式转换:if括号里变量会转换成布尔
遇到宽松相等开启隐式转换:布尔会转换成数字,字符串遇到数字会变成数字,对象遇到基本数据类型会依照ToPrimitive规则转换为原始类型
ToPrimitive:对象的ToPrimitive操作会先调用valueOf方法,返回一个原始类型的值,如果valueOf不存在或者返回的不是原始类型值,就用toString方法返回一个原始类型。如果不是,就抛出异常。
一些常见的转换:
String(null) //'null' 同undefined,true,false
String([null]、[]) // '',同undefined
String({
}) //[Object Object]
Number(null) // 0
Number(undefined、{
}) // NaN
Boolean([]) // true,假只有null、undefined、false、0、NaN
Boolean({
}) // true
一些常见的类型相等:
[] == ![] // true
[null] == 0、false // 同undefined
[]、['0']、'0' == false、0
null == undefined
一些常见的坑:(下面全是错的)
[] == []
{
}=={
}
{
}==!{
}
null==0
undefined==0
对象比较的是引用值在内存中是否指向同一对象,上面的两个对象互不相干。
加减
console.log("20" + 6) // "206" 字符串拼接 string + number = string
console.log("16" - 6) // 10 减法运算 string - number = number
类型检测
类型检测
typeof:字符串、数字、布尔、undefined、object(null)、function
instanceof:某个对象的原型链是否包含某个构造函数的 prototype 属性,适用于任何 object 的类型检查之外,也可以用来检测内置对象,比如:Array、RegExp、Object、Function,对基本数据类型不起作用因为没有原型链
constructor:确定当前对象的构造函数
hasOwnProperty:判断属性是否存在于当前对象实例中(而不是原型对象中)
var arr =