摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實喊的都是你。當然的嘛狗蛋買了件新衣服,小明當然就有這件新衣服了。。。
上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11...
在上一章講解原型鏈時提到了:所有的引用類型都有一個_proto_屬性,稱之為隱式原型。
那么引用類型是什么鬼?
盡量簡單的講解一下javascript中的數據類型:
在JS中有兩大數據類型:
1.基本數據類型,也稱為值類型。
2.復雜數據類型,也成為引用類型 。
值類型: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已經沒關系了。
引用類型是值“傳遞”,以引用類型中的Object類型為例。
//例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中很重要的一部分,特別是值類型和引用類型的賦值區別。一定要理解好~
下一回:變量提升與函數聲明
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/53141.html
摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實喊的都是你。當然的嘛狗蛋買了件新衣服,小明當然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時提到了:所有的引用類型都有一個_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡單的講解一下javascript中的數據類...
摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實喊的都是你。當然的嘛狗蛋買了件新衣服,小明當然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時提到了:所有的引用類型都有一個_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡單的講解一下javascript中的數據類...
摘要:前言見解有限,如有描述不當之處,請幫忙及時指出,如有錯誤,會及時修正。倘若用的是中文搜索。所以最終的實例對象仍然能進行正常的原型鏈回溯,回溯到原本的所有原型方法這樣通過一個巧妙的欺騙技巧,就實現了完美的繼承。 前言 見解有限,如有描述不當之處,請幫忙及時指出,如有錯誤,會及時修正。 20180201更新: 修改用詞描述,如組合寄生式改成寄生組合式,修改多處筆誤(感謝@Yao Ding的...
摘要:所有引用類型的隱式原型指向它構造函數的顯式原型。理論就不驗證了,寫原型模式時。原型模式構造函數原型實例化橘貓魚呀魚橘貓魚呀魚在上述代碼中,在之后就相當于這個函數。 上一章:new一個對象的過程 https://segmentfault.com/a/11... 原型鏈4大理論:1.所有的引用類型都有一個_proto_屬性,稱之為隱式原型。 2.所有的函數(Function)都有一個pro...
閱讀 2771·2021-10-11 11:08
閱讀 1489·2021-09-30 09:48
閱讀 1049·2021-09-22 15:29
閱讀 1037·2019-08-30 15:54
閱讀 976·2019-08-29 15:19
閱讀 527·2019-08-29 13:12
閱讀 3161·2019-08-26 13:53
閱讀 957·2019-08-26 13:28