首頁 web前端 js教程 關於js中for in的缺陷淺析_javascript技巧

關於js中for in的缺陷淺析_javascript技巧

May 16, 2016 pm 05:11 PM
js 缺陷

for in 語句用來列舉物件的屬性(成員),如下

複製程式碼 代碼如下:

var obj = { name:">

var obj = {name:"jack" >      getName:function(){return this.name}
};
//輸出name,getName   
for(var atr in obj) {
}  
for(var atr in obj) {
}  🎜>

注意了嗎,沒有輸出obj的toString,valueOf等內建屬性(或稱為內建成員,隱藏屬性和預先定義屬性)。即for in用來列舉物件的顯示成員(自訂成員)。

如果重寫了內建屬性呢,下面就重寫obj的toString

代碼如下:


var obj = {name:"jack",


var obj = {name:"jack",


var obj = {name:"jack" >      getName:function(){return this.name},
      toString:function(){return "I'm jack."}}

forvar atr in obj) {}

會輸出什麼呢?

1、IE6/7/8 下和沒有重寫toString一樣,仍然只輸出name,getName

2、IE9/Firefox/Chrome/Opera/Safari下則輸出name,getName,toString 如果為內建原型新增屬性/方法,那麼for in時也是可遍歷的
複製程式碼


程式碼如下:


Object.prototype.clone = function() {
var obj = {
    name: 'jack',
    age: 33
}
// name, age, clonefor (var nert (n)

}

為Object.prototype新增了方法clone,for in時所有瀏覽器都顯示了clone。

這或許還沒什麼,因為一般不建議去擴充內建構造器的原型,這也是Prototype.js走向沒落的原因之一。 jQuery和Underscore沒有擴展自原型,前者在jQuery物件上做文章,後者索性將所有方法都掛在下劃線上。

但有時我們為了相容於ES5或後續版本,會在不支援ES5的瀏覽器上(IE6/7/8)去擴充內建構造器的原型,這時for in在各瀏覽器中就不同了。如下
複製程式碼


程式碼如下:


if (!Function.prototype.bind) {

if (!Function.prototype.bind) {    Function.prototype.bind = function(scope) {
        var fn = this
       
        }
    }
}
function greet(name) { 
    alert(this.greet ', ' name)
}
for (var n in greet) {    alert(n)

}

IE6/7/8輸出了bind,其它瀏覽器則無。因為現代瀏覽器中bind是原生支援的,for in不到,IE6/7/8則是為Function.prototype加入了bind。 總結下:在跨瀏覽器的設計中,我們不能依賴for in來取得物件的成員名稱,一般使用hasOwnProperty來判斷下。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用JS和百度地圖實現地圖平移功能 如何使用JS和百度地圖實現地圖平移功能 Nov 21, 2023 am 10:00 AM

如何使用JS和百度地圖實現地圖平移功能

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟 Dec 17, 2023 pm 06:55 PM

股票分析必備工具:學習PHP和JS繪製蠟燭圖的步驟

建議:優秀JS開源人臉偵測辨識項目 建議:優秀JS開源人臉偵測辨識項目 Apr 03, 2024 am 11:55 AM

建議:優秀JS開源人臉偵測辨識項目

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法 Dec 18, 2023 pm 03:39 PM

PHP與JS開發技巧:掌握繪製股票蠟燭圖的方法

如何使用PHP和JS創建股票蠟燭圖 如何使用PHP和JS創建股票蠟燭圖 Dec 17, 2023 am 08:08 AM

如何使用PHP和JS創建股票蠟燭圖

如何使用JS和百度地圖實現地圖多邊形繪製功能 如何使用JS和百度地圖實現地圖多邊形繪製功能 Nov 21, 2023 am 10:53 AM

如何使用JS和百度地圖實現地圖多邊形繪製功能

如何使用JS和百度地圖實現地圖熱力圖功能 如何使用JS和百度地圖實現地圖熱力圖功能 Nov 21, 2023 am 09:33 AM

如何使用JS和百度地圖實現地圖熱力圖功能

如何使用JS和百度地圖實現地圖點擊事件處理功能 如何使用JS和百度地圖實現地圖點擊事件處理功能 Nov 21, 2023 am 11:11 AM

如何使用JS和百度地圖實現地圖點擊事件處理功能

See all articles