中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript有哪些易錯點

發布時間:2020-07-30 14:41:25 來源:億速云 閱讀:109 作者:小豬 欄目:web開發

小編這次要給大家分享的是javascript有哪些易錯點,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

為什么 typeof null === 'object'

原理是這樣的,不同的對象在底層都表示為二進制,在JavaScript中二進制前三位都為0的話會被判斷為 object 類型, null 的二進制表示是全0,自然前三位也是0,所以執行 typeof 時會返回“ object ”。

對象屬性的存在性

如 myObject.a 的屬性訪問返回值可能是 undefined ,但是這個值有可能是屬性中存儲的 undefined ,也可能是因為屬性不存在所以返回 undefined 。那么如何區分這兩種情況呢?

var myObject = {
  a:2
};

// 方案一
("a" in myObject); // true
("b" in myObject); // false

// 方案二
myObject.hasOwnProperty( "a" ); // true
myObject.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;
		}
        
        // 方法1
		Bar.prototype = Object.create(Foo.prototype)
        
        // 方法2
		Bar.prototype = Foo.prototype;

        // 方法3
        Bar.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(..) 會憑空創建一個“新”對象并把新對象內部的 [[Prototype]] 關聯到你指定的對象(本例中是 Foo.prototype )。

Bar.prototype = Foo.prototype 并不會創建一個關聯到 Bar.prototype 的新對象,它只是讓 Bar.prototype 直接引用 Foo.prototype 對象。因此當你執行類似 Bar.prototype.myLabel = ... 的賦值語句時會直接修改 Foo.prototype 對象本身。

Bar.prototype = new Foo() 的確會創建一個關聯到 Bar.prototype 的新對象。但是它使用了 Foo(..)的“構造函數調用”,如果函數 Foo 有一些副作用(比如寫日志、修改狀態、注冊到其他對象、給 this 添加數據屬性,等等)的話,就會影響到 Bar() 的“后代”,后果不堪設想。

結論

因此,要創建一個合適的關聯對象,我們必須使用 Object.create(..) 而不是使用具有副作用的 Foo(..) 。這樣做唯一的缺點就是需要創建一個新對象然后把舊對象拋棄掉,不能直接修改已有的默認對象。

看完這篇關于javascript有哪些易錯點的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

秦皇岛市| 繁昌县| 互助| 泰和县| 清涧县| 武邑县| 腾冲县| 潜山县| 翁牛特旗| 绥棱县| 亚东县| 鄂州市| 沙雅县| 田东县| 乐亭县| 新邵县| 丹巴县| 利辛县| 舒城县| 萨迦县| 绍兴市| 莱阳市| 黄陵县| 泽普县| 孟连| 虎林市| 河北区| 双城市| 徐水县| 涿鹿县| 介休市| 体育| 西和县| 徐闻县| 蛟河市| 古交市| 石阡县| 桃源县| 普兰店市| 木兰县| 比如县|