1.基本数据类型:null undefined number string boolean 引用数据类型:object(数组对象,普通对象,日期对象,正则对象,math函数对象) function(function原型链最顶端也是object) 2.检测数据类型:有且只有四种 instanceof(注意手写instanceof方法) object.prototype.toString.call constructor
- typeof 局限性:typeof [value] null为'object' 因为所有的值在内存中都是以二进制存储的,null存储的二进制为000 typeof检测数据类型的时候会把000处理为对象,这个可理解为typeof检测数据类型的一个bug。typeof不能细分对象类型(数组对象或者是普通对象)
- typeof返回的值为字符串 typeof typeof typeof [12] => "string" -number详解(NAN是number类型)
- NAN表示不是一个有效数字。NAN!==NAN NAN和谁都不相等,包括它自己
- isNAN([value])检测是否为有效数字,是有效数字返回false,不是有效数字返回true 把其他类型的值转化为数字类型的方法
- 强转换(基于底层机制的转换)Number([value])
- 一些隐式的转换都是基于Number完成的
- isNaN([value])
- 一些隐式的转换都是基于Number完成的
- 弱转换(基于一些额外的方法转换)parseInt([value])/parseFloat([value]) parseInt('123') parseInt('a123') parseInt(null) parseInt(undefined) parseInt(NaN) number('') number(null) number(undefined) number(0) number(NaN)
等号赋值: 第一步:创建值(基本数据类型是直接存储到栈内存中,引用数据类型是以下方式)
- 开辟堆内存 AAAFFF00(16进制)
- 存储键值对 name:'xiaowang' fn:自执行函数,传入obj.name 但是此处还没有obj.name,obj因为变量提升的关系值为undefined
- 把堆的引用地址存储到栈当中 第二步:创建变量 第三步:关联值的指针和变量
var obj = { name: 'xiaowang', fn: (function (x) { return x })(obj.name) } console.log(obj.fn) 报错:can not read property 'name' of undefined
==两个等号
- 规则: 1.对象==字符串 对象转化为字符串 2.null == undefined 三个等号不相等,但是和其他任何值都不相等 3.NAN和谁都不相等,包括自己 4.剩下的情况都是转化为数字再比较的 数组转化为数字->转化为字符串(toString)->转化为数字(Number) 把其他类型的值转化为布尔类型值遵循的规律:只有undefined/null/NaN/0/''五个值为false,其余的都是true {}代表:1.对象 2.代码块(块级作用域)
- 练习题: let str = 100 + true + 12.3 + null + undefined + 'tecent' + [] + null + 9 + false
[] = false
![] = false
{} + 0 ? alert('ok') : alert('no')
({} + 0) ? alert('ok') : alert('no')
0 + {} ? alert('ok') : alert('no')
var a = {}, b='0',c=0 a[b] = 1 a[c] = 2 console.log(a[b])
var a = {}, b=symbol('1'),c=symbol('1') a[b] = 1 a[c] = 2 console.log(a[b])
var a = {}, b={n:1},c={n:2} a[b] = 1 a[c] = 2 console.log(a[b])
-
浏览器提供了一个供代码运行的环境 => 栈内存 (栈内存和堆内存都是计算机内存中开辟出的空间) 执行环境栈(ECStack):1.供代码执行 2.存储基本数据类型值、变量、堆的引用地址 var a ={n:1} var b = a a.x = a = {n:2} console.log(a.x) console.log(b)
-
GO全局对象:它是一个堆内存,用于存储浏览器自带的API方法,在浏览器端,让windows指向它 VO(G):全局变量对象:全局上下文中用于存储全局变量的空间,它不是GO,只不过两者会有关联“映射机制”