主要讲述[] {} 以及 JavaScript中的类型转换
主要参考文章(非常推荐):https://segmentfault.com/a/1190000008432611#articleHeader1
首先看一些示例:
[]==[] //false
[]==![] //true
{}==!{} //false
{}==![] //VM1896:1 Uncaught SyntaxError: Unexpected token ==
![]=={} //false
[]==!{} //true
undefined==null //true
1.[] == [] 为什么是false?
有点js基础应该知道对象是引用类型,就会一眼看出来[] == []会输出false,因为左边的[]和右边的[]看起来长的一样,但是他们引用的地址并不同,所以返回false。
我们可以学习下JavaScript中内存空间的概念,可以参考:https://www.jianshu.com/p/996671d4dcc4
简单类型都放在栈(stack)里
对象类型都放在堆(heap)里
var a = 20;
var b = 'abc';
var c = true;
var d = { m: 20 }//地址假设为0x0012ff7c
var e = { m: 20 }//重新开辟一段内存空间假设为0x0012ff8f
console.log(e==d);//false
那为什么引用值要放在堆中,而原始值要放在栈中,不都是在内存中吗,为什么不放在一起呢?
function Person(id,name,age){
this.id = id;
this.name = name;
this.age = age;
}
var num = 10;
var bol = true;
var str = "abc";
var obj = new Object();
var arr = ['a','b','c'];
var person = new Person(100,"笨蛋的座右铭",25);
然后我们来看一下内存分析图:
变量num,bol,str为基本数据类型,它们的值,直接存放在栈中,obj,person,arr为复合数据类型,他们的引用变量存储在栈中,