上一章--原型鏈講解:傳送門: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中很重要的一部分,特別是值類型和引用類型的賦值區別。必定要理解好~
下一回:變量提高與函數聲明