關於js中for in的缺陷淺析_javascript技巧
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},
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 = function() {
var obj = {
name: 'jack',
age: 33
}
}
為Object.prototype新增了方法clone,for in時所有瀏覽器都顯示了clone。
這或許還沒什麼,因為一般不建議去擴充內建構造器的原型,這也是Prototype.js走向沒落的原因之一。 jQuery和Underscore沒有擴展自原型,前者在jQuery物件上做文章,後者索性將所有方法都掛在下劃線上。
複製程式碼程式碼如下:
if (!Function.prototype.bind) {
if (!Function.prototype.bind) {
var fn = this
}
}
}
function greet(name) {
alert(this.greet ', ' name)
}
}
IE6/7/8輸出了bind,其它瀏覽器則無。因為現代瀏覽器中bind是原生支援的,for in不到,IE6/7/8則是為Function.prototype加入了bind。 總結下:在跨瀏覽器的設計中,我們不能依賴for in來取得物件的成員名稱,一般使用hasOwnProperty來判斷下。本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前
By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
擊敗分裂小說需要多長時間?
3 週前
By DDD
R.E.P.O.保存文件位置:在哪里以及如何保護它?
3 週前
By DDD

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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