上一章--原型链讲解:传送门:https://segmentfault.com/a/11...javascript
在上一章讲解原型链时提到了:全部的引用类型都有一个_proto_属性,称之为隐式原型。
那么引用类型是什么鬼?java
尽可能简单的讲解一下javascript中的数据类型:
在JS中有两大数据类型:
1.基本数据类型,也称为值类型。
2.复杂数据类型,也成为引用类型 。segmentfault
值类型:Number、String、Boolean、Null、Undefined
引用类型:Object、Array、Function数组
因此JS一共有8种数据类型。函数
那么为何要区分为值类型和引用类型呢?它们有什么不一样之处?
客官且看:
值类型是值的“复制”,以值类型中的Number类型为例。大数据
var num = 100; var num2 = num; num = 200; console.log(num2);//100 console.log(num);//200
在上述代码中,第2行就是把num的值100复制给num2,num2的值就为100了。在第3行num的值再变化为200时与num2已经不要紧了。code
引用类型是值“传递”,以引用类型中的Object类型为例。ip
//例1: var obj = {a:100}; var obj2 = obj; obj.a = 200; console.log(obj2.a);//{a:200} console.log(obj.a);//{a:200} //例2: var arr = [1,2]; var arr2 = arr; arr2[0] = 3; console.log(arr);//[3,2] console.log(arr2);//[3,2]
在上述代码中,例1第2行代码中,把obj的值传递给obj2,在这里obj2只是obj的一个别名!内存
什么意思呢?就是说你叫作小明,你妈妈叫你狗蛋,狗蛋就是你的别名。因此不论你妈妈是喊,狗蛋回家吃饭了,仍是喊小明回家吃饭了,其实喊的都是你。全部obj和obj2实际上是指向同一内存地址的,他们就是同一个东西,当其中一个变了,另外一个固然也随着变化。原型链
从例1和例2中能够看出obj变化了会对obj2影响,arr2变化了arr也变化了。固然的嘛!狗蛋买了件新衣服,小明固然就有这件新衣服了。。。
如何判断一个变量是什么数据类型呢?
typeof()能够查看值类型全部数据类型,能区分出引用类型的Function,可是对于引用类型的Object和Array酒不能区分,都会显示为Object.
null是个特殊的东西,会显示为object,有兴趣的能够去看看,这里很少说。
那怎么区分出数组呢?答案是:instanceof
如:a instanceof Array 只有当a是数组时才会是true.
var a = 5; var b = 'abc'; var c = null; var d = undefined; console.log(typeof(a))//number console.log(typeof(b))//string console.log(typeof(c))//object console.log(typeof(d))//undefined var obj = {a:1} var arr = [1,2] var fn = function(){ console.log('hello'); } console.log(typeof(obj))//object console.log(typeof(arr))//object console.log(typeof(fn))//function console.log(arr instanceof Object)//true console.log(obj instanceof Object)//true console.log(arr instanceof Array)//true console.log(obj instanceof Array)//false console.log(arr instanceof Number)//false
数据类型转换:
数据类型的转换有两种:隐式转换、强制转换
隐式转换:隐式转换一般发生在运算中。
var num = 10; var obj = '20' var res = num + obj;//10+'20' console.log(res) //'1020' var obj2 = '11'; var num2 = 5; var res2 = obj2 > num2;//'11'>5 console.log(res2)//true
强制转换:通常用String()、Number()、Boolean()转化(可能会有失精度)
var num = 123; console.log(typeof(num))//number console.log(typeof (String(num)))//string
例行总结:
数据类型是JS中很重要的一部分,特别是值类型和引用类型的赋值区别。必定要理解好~
下一回:变量提高与函数声明