javascript 易錯知識點實例小結(jié)
本文實例總結(jié)了javascript 易錯知識點。分享給大家供大家參考,具體如下:
為什么 typeof null === ’object’原理是這樣的,不同的對象在底層都表示為二進(jìn)制,在JavaScript中二進(jìn)制前三位都為0的話會被判斷為 object 類型, null 的二進(jìn)制表示是全0,自然前三位也是0,所以執(zhí)行 typeof 時會返回“ object ”。
對象屬性的存在性如 myObject.a 的屬性訪問返回值可能是 undefined ,但是這個值有可能是屬性中存儲的 undefined ,也可能是因為屬性不存在所以返回 undefined 。那么如何區(qū)分這兩種情況呢?
var myObject = { a:2};// 方案一('a' in myObject); // true('b' in myObject); // false// 方案二myObject.hasOwnProperty( 'a' ); // truemyObject.hasOwnProperty( 'b' ); // false// 方案三Object.prototype.hasOwnProperty.call(myObject, ’b’)對象繼承的三種方法
參考如下代碼:
function Foo(name) {this.name = name;}Foo.prototype.myName = function() {console.log(this.name)}function Bar(name, label) {Foo.call(this, name);this.label = label;}// 方法1Bar.prototype = Object.create(Foo.prototype)// 方法2Bar.prototype = Foo.prototype;// 方法3Bar.prototype = new Foo();//Bar.prototype.constructor = Bar;Bar.prototype.sayName = function() {console.log(this.name)}var b = new Foo(’fayin’)b.sayName()
上例中,三種方法都可以使 Bar 繼承 Foo.prototype 上的方法,但它們之間又有微妙的差別:
Object.create(..) 會憑空創(chuàng)建一個“新”對象并把新對象內(nèi)部的 [[Prototype]] 關(guān)聯(lián)到你指定的對象(本例中是 Foo.prototype )。
Bar.prototype = Foo.prototype 并不會創(chuàng)建一個關(guān)聯(lián)到 Bar.prototype 的新對象,它只是讓 Bar.prototype 直接引用 Foo.prototype 對象。因此當(dāng)你執(zhí)行類似 Bar.prototype.myLabel = ... 的賦值語句時會直接修改 Foo.prototype 對象本身。
Bar.prototype = new Foo() 的確會創(chuàng)建一個關(guān)聯(lián)到 Bar.prototype 的新對象。但是它使用了 Foo(..)的“構(gòu)造函數(shù)調(diào)用”,如果函數(shù) Foo 有一些副作用(比如寫日志、修改狀態(tài)、注冊到其他對象、給 this 添加數(shù)據(jù)屬性,等等)的話,就會影響到 Bar() 的“后代”,后果不堪設(shè)想。
結(jié)論
因此,要創(chuàng)建一個合適的關(guān)聯(lián)對象,我們必須使用 Object.create(..) 而不是使用具有副作用的 Foo(..) 。這樣做唯一的缺點就是需要創(chuàng)建一個新對象然后把舊對象拋棄掉,不能直接修改已有的默認(rèn)對象。
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《JavaScript錯誤與調(diào)試技巧總結(jié)》、《JavaScript傳值操作技巧總結(jié)》、《javascript編碼操作技巧總結(jié)》、《JavaScript中json操作技巧總結(jié)》、《JavaScript切換特效與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript動畫特效與技巧匯總》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運算用法總結(jié)》
希望本文所述對大家JavaScript程序設(shè)計有所幫助。
相關(guān)文章:
1. ASP中解決“對象關(guān)閉時,不允許操作。”的詭異問題……2. Gitlab CI-CD自動化部署SpringBoot項目的方法步驟3. Java封裝數(shù)組實現(xiàn)包含、搜索和刪除元素操作詳解4. JAVA上加密算法的實現(xiàn)用例5. python基于socket模擬實現(xiàn)ssh遠(yuǎn)程執(zhí)行命令6. 淺談SpringMVC jsp前臺獲取參數(shù)的方式 EL表達(dá)式7. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)8. Django:使用filter的pk進(jìn)行多值查詢操作9. 使用Python和百度語音識別生成視頻字幕的實現(xiàn)10. idea打開多個窗口的操作方法
