JavaScript for in 語句
程式語言中,語法結構的命名通常與其功能存在一定關聯。
從for in語句這個名稱大致猜測出它的功能,for表示進行迴圈操作,in表示屬性所在的物件。
那麼for in合體可以大致猜測,功能是迴圈遍歷指定物件所具有的屬性。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼var antzone={ webName:"螞蟻部落", webAddress:"青島市南區", age:2 } for(var prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
可以看到使用for in語句可以迴圈遍歷物件中的屬性。
[JavaScript] 純文字檢視 複製程式碼執行程式碼Object.prototype.ant="ES2015"; let antzone={ webName:"螞蟻部落", webAddress:"青島市南區", age:2, } for(let prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
由上面程式碼的執行結果可以看到,for in不但可以遍歷物件的自有屬性,也會遍歷到來自於原型鏈的屬性。
但是並不是所有原型鏈上的屬性都是可以遍歷到的,比如toString方法繼承自原型鏈,很明顯它並沒有被遍歷到。
因為像toString和toValue等內建屬性或者方法不會被for in遍歷到,所有標準瀏覽器行為一致。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone={ webName:"螞蟻部落", webAddress:"青島市南區", age:6, toString:function(){ // code } } for(let prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
可以看到谷歌瀏覽器成功的遍歷到被重寫的toString方法,不止谷歌,所有標準瀏覽器和IE8+瀏覽器都可以。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼Object.prototype.toString=function(){ console.log("JS教程"); }; let antzone={ webName:"螞蟻部落", webAddress:"青島市南區", age:2, } antzone.toString() for(let prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
上面程式碼也對原型鏈上的進行了重寫,並且從列印結果來看,重寫完全正確。
但是for in並沒有遍歷到被重寫的內建方法toString。
這是因為toString方法重寫的位置在原型鏈上。
屬性是否可以被列舉:
遍歷和列舉是一個意思。
在前面的程式碼中,貌似只要是自定義屬性都可以被for in遍歷到。
其實並不是這樣,因為自定義屬性的enumerable特性預設值是true,也就是可以列舉,當然也可以設定為false。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone={ webName:"螞蟻部落", age:6 } Object.defineProperty(antzone, "url", { value: "http://www.softwhy.com", enumerable: false }); for(var prop in antzone){ console.log(prop); }
程式碼執行效果截圖如下:
可以看到屬性url並沒有被遍歷到,因為它被設定為不可列舉。
總結如下:
(1).for in在所有瀏覽器都可以遍歷可列舉的自有屬性。
(2).for in在所有瀏覽器都可以遍歷可列舉的原型鏈上的非內建屬性。
(2).for in可以遍歷在物件自身上重寫的內建屬性,所有標準瀏覽器和IE8+瀏覽器支援。
相關文章
- JavaScript 語句JavaScript
- JavaScript return 語句JavaScript
- JavaScript while 語句JavaScriptWhile
- JavaScript switch語句JavaScript
- JavaScript if else 語句JavaScript
- JavaScript switch 語句JavaScript
- JavaScript with 語句用法JavaScript
- JavaScript 標籤語句JavaScript
- JavaScript之流程語句JavaScript
- javaScript條件語句JavaScript
- JavaScript for 迴圈語句JavaScript
- JavaScript do while 語句JavaScriptWhile
- Javascript中的label語句JavaScript
- JavaScript break與continue語句JavaScript
- JavaScript跳出for迴圈語句JavaScript
- JavaScript try catch finally 語句JavaScript
- JavaScript try/catch/finally 語句JavaScript
- JavaScript中的switch語句JavaScript
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- JavaScript 語句是否省略分號JavaScript
- JavaScript statement flow control || JavaScript 語句流程控制JavaScript
- JavaScript return語句簡單介紹JavaScript
- JavaScript常用的流程控制語句JavaScript
- JavaScript switch與if else語句的區別JavaScript
- flask之控制語句 if 語句與for語句Flask
- JavaScript的流程控制語句以及函式JavaScript函式
- 腦圖學習 JavaScript 之犀牛書【五】語句JavaScript
- javascript新手入門之條件語句,迴圈JavaScript
- 前端筆記之JavaScript(三)關於條件判斷語句、迴圈語句那點事前端筆記JavaScript
- 分支語句和迴圈語句
- 前端 JavaScript 中的三種 for 迴圈語句總結前端JavaScript
- 【SQL】14 UNION 操作符、SELECT INTO 語句、INSERT INTO SELECT 語句、CREATE DATABASE 語句、CREATE TABLE 語句SQLDatabase
- if 語句
- if語句
- insert into select語句與select into from語句
- 【譯】編寫更好JavaScript條件語句的5個技巧JavaScript
- 「譯」寫好JavaScript條件語句的5條守則JavaScript
- 【譯】JavaScript 中寫好條件語句的五個技巧JavaScript