[樂意黎原創]JS裡的for…in和for…of的用法與區別
for...in 迴圈
for...in 語句用於遍歷陣列或者物件的屬性(對陣列或者物件的屬性進行迴圈操作)。for...in 語句用於對陣列或者物件的屬性進行迴圈操作。
for ... in 迴圈中的程式碼每執行一次,就會對陣列的元素或者物件的屬性進行一次操作。for...in
語句以任意順序遍歷一個物件的可列舉屬性。對於每個不同的屬性,語句都會被執行。
for (variable in object) {...}
variable
- 在每次迭代時,將不同的屬性名分配給變數。
object
- 被迭代列舉其屬性的物件。
for...in
迴圈只遍歷可列舉屬性。像 Array
和 Object
使用內建建構函式所建立的物件都會繼承自
Object.prototype
和String.prototype
的不可列舉屬性,例如 String
的 indexOf()
方法或 Object
的toString()
方法。迴圈將遍歷物件本身的所有可列舉屬性,以及物件從其建構函式原型中繼承的屬性(更接近原型鏈中物件的屬性覆蓋原型屬性)。陣列索引只是具有整數名稱的列舉屬性,並且與通用物件屬性相同。不能保證for ... in
將以任何特定的順序返回索引。for ... in
迴圈語句將返回所有可列舉屬性,包括非整數型別的名稱和繼承的那些。
因為迭代的順序是依賴於執行環境的,所以陣列遍歷不一定按次序訪問元素。因此當迭代訪問順序很重要的陣列時,最好用整數索引去進行for
Array.prototype.forEach()
或 for...of
迴圈)。語法:
for (變數 in 物件){
在此執行程式碼
}
“變數”用來指定變數,指定的變數可以是陣列元素,也可以是物件的屬性。
var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
mycars.color = "white"
for (var x in mycars)
{
console.log(mycars[x]);
}
var mycars = ["Saab", "Volvo", "BMW"]; mycars.color = "white" for (var x in mycars) { console.log(mycars[x]); }
var mycars = {1:"Saab", 2:"Volvo", 3:"BMW"};
mycars.color = "white"
for (var x in mycars)
{
console.log(mycars[x]);
}
var mycars = {"1":"Saab", "2":"Volvo", "3":"BMW"};
mycars.color = "white"
for (var x in mycars)
{
console.log(mycars[x]);
}
for...of 迴圈
for … of迴圈是ES6引入的新的語法,用for … of迴圈遍歷集合
for...of
語句在可迭代物件(包括 Array
,Map
,Set
,String
,TypedArray
,arguments 物件等等)上建立一個迭代迴圈,呼叫自定義迭代鉤子,併為每個不同屬性的值執行語句。
for (variable of iterable) {
//statements
}
variable
在每次迭代中,將不同屬性的值分配給變數。iterable
被迭代列舉其屬性的物件。var mycars = new Array()
mycars[0] = "Saab"
mycars[1] = "Volvo"
mycars[2] = "BMW"
mycars.color = "white"
for (var x of mycars)
{
console.log(x);
}
ar mycars = ["Saab", "Volvo", "BMW"];
mycars.color = "white"
for (var x of mycars)
{
console.log(x);
}
var mycars = {1:"Saab", 2:"Volvo", 3:"BMW"};
mycars.color = "white"
for (var x of mycars)
{
console.log(x);
}
//錯誤用法
for...of
與for...in
的區別
無論是for...in
還是for...of
語句都是迭代一些東西。它們之間的主要區別在於它們的迭代方式。
for...in
語句以原始插入順序迭代物件的可列舉屬性。
for...of
語句遍歷可迭代物件定義要迭代的資料。
以下示例顯示了與Array
一起使用時,for...of
迴圈和for...in
迴圈之間的區別。
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // logs 0, 1, 2, "foo"
}
}
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
每個物件將繼承objCustom
屬性,並且作為Array
的每個物件將繼承arrCustom
屬性,因為將這些屬性新增到Object.prototype
和Array.prototype
。由於繼承和原型鏈,物件iterable
繼承屬性objCustom
和arrCustom
。
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
此迴圈僅以原始插入順序記錄iterable
物件的可列舉屬性。它不記錄陣列元素3
, 5
, 7
或hello
,因為這些不是列舉屬性。但是它記錄了陣列索引以及arrCustom
和objCustom
。如果你不知道為什麼這些屬性被迭代,array iteration and for...in
中有更多解釋。
for (let i in iterable) {
if (iterable.hasOwnProperty(i)) {
console.log(i); // logs 0, 1, 2, "foo"
}
}
這個迴圈類似於第一個,但是它使用hasOwnProperty()
來檢查,如果找到的列舉屬性是物件自己的(不是繼承的)。如果是,該屬性被記錄。記錄的屬性是0
, 1
, 2
和foo
,因為它們是自身的屬性(不是繼承的)。屬性arrCustom
和objCustom
不會被記錄,因為它們是繼承的。
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
該迴圈迭代並記錄iterable
作為可迭代物件定義的迭代值,這些是陣列元素 3
, 5
, 7
,而不是任何物件的屬性。
For 迴圈
for 迴圈是您在希望建立迴圈時常會用到的工具。
下面是 for 迴圈的語法:
for (語句 1; 語句 2; 語句 3) { 被執行的程式碼塊 }
語句 1 在迴圈(程式碼塊)開始前執行
語句 2 定義執行迴圈(程式碼塊)的條件
語句 3 在迴圈(程式碼塊)已被執行之後執行
例項
for (var i=0; i<5; i++) { x=x + "The number is " + i + "<br>"; }
總結
for … in迴圈由於歷史遺留問題,它遍歷的實際上是物件的屬性名稱。一個Array陣列實際上也是一個物件,它的每個元素的索引被視為一個屬性。
for … in迴圈將把name包括在內,但Array的length屬性卻不包括在內。
for … of迴圈則完全修復了這些問題,它只迴圈集合本身的元素。
以上
-------------------------------
樂意黎
2018-05-07
相關推薦
[樂意黎原創]JS裡的for…in和for…of的用法與區別
for...in 迴圈for...in 語句用於遍歷陣列或者物件的屬性(對陣列或者物件的屬性進行迴圈操作)。for...in 語句用於對陣列或者物件的屬性進行迴圈操作。for ... in 迴圈中的程式碼每執行一次,就會對陣列的元素或者物件的屬性進行一次操作。for...in
[樂意黎原創] Centos下目錄許可權和使用者名稱使用者組等操作命令詳解
1. Linux/Centos 許可權命令常識: Linux作業系統是多使用者多工作業系統,包括使用者賬戶和組賬戶兩種: 細分使用者賬戶(普通使用者賬戶,超級使用者賬戶)除了使用者賬戶以為還有組賬戶所謂組賬戶就是使用者賬戶的集合,centos組中有兩種型別,私有組和標準組:
js遍歷物件、遍歷陣列、js陣列方法大全、區分map()和forEach()以及filter()、區分for...in...和for...of...
1、給物件新增屬性:使用 object.prop 或object['prop'] 給物件新增屬性 let obj={}; obj.name="zhangsan"; obj["age"]=23; obj["class"]="語文"; console.log(obj
[樂意黎原創] JS根據useAgent來判斷edge, ie, firefox, chrome, opera, safari 等瀏覽器的型別及版本
JS根據瀏覽器的useAgent來判斷瀏覽器的型別。userAgent 屬性是一個只讀的字串,聲明瞭瀏覽器用於 HTTP 請求的使用者代理頭的值。javascript語法:navigator.userAgentPHP語法:$_SERVER['HTTP_USER_AGENT']
關於JSON類的兩個用途與for..in和for循環的區別
進行 length 區別 prop per str 字符 number stringify JSON 這個類的兩個用途: 1)將Object 對象,轉換成string 類型 var obj = {"a":"1","b":"2","c":"json"}; var
for-in和for-of,forEach和Map
循環對象 共同點 school 遍歷 fine 不能 name pre 包括 for-in和for-of 1. for-in循環實際是為循環”enumerable“對象而設計的,是用來循環帶有字符串key的對象的。 使用for in會遍歷數組所有的可枚舉屬性,包
for..in 和 for...of 的區別
ttr display ... isp 定義 執行 可叠代對象 ring ole for...of 是ES6出現的 循環遍歷的是值 語句在可叠代對象(包括 Array, Map, Set, String, TypedArray,arguments 對象等等)上創建一個叠代循
五分鐘掌握 for...in 和 for...of 區別
GitHub 地址,歡迎star,檢視更多整理的前端知識 for...in for...in 語句以任意順序遍歷一個物件的可列舉屬性。 for...in 遍歷物件本身的所有可列舉屬性,以及物件從其建構函式原型中繼承的屬性。 for (variable in object) {...} var
for in 和 for of 的區別
最近突然發現雖然整天做專案,但是基礎的東西忘得越來越多了,所以我準備沒事就回顧回顧基礎知識,今天來回顧一下for in 和for of的區別 首先來看for in for in 可以用來遍歷陣列,但是會有以下幾個問題 1.index索引為字串型數字,不能直接進行幾何運
for in 和 for of的區別詳解
for in 和 for of 相對於大家肯定都不陌生,都是用來遍歷屬性的沒錯。那麼先看下面的一個例子: 例1 const obj = { a: 1, b: 2, c: 3 } for (let i in obj) {
forEach、for...in和for..of比較
forEach是遍歷陣列中的值: var arr=['one','two','three']; arr.forEach(function(value){ console.log(value); }) //one //two //three 這種寫法的問題在於,無法中途跳出forE
for、for in和for of
Array、Object、Set、Map四種資料結構中for、for in和for of迴圈的區別? 一、普通for迴圈在Array和Object中都可以使用。 二、for in在Array和Object中都可以使用。 注意:在物件中包含原型上的屬性
Javascript 中 的 for ... in 和 for ... of 差別
Javascript 中 的 for ... in 和 for ... of 差別 for ... in 是歷史問題,在迴圈資料時會可以出現奇怪的問題,比如把資料的屬性迴圈出來。 for ... of 是 ES6 解決歷史問題而出的。 以下程式碼可以看出區別 <script>
for-in 和 for-of 的區別
1. for-in迴圈 for-in迴圈主要用於遍歷物件,for()中的格式:for(keys in zhangsan){} keys表示obj物件的每一個鍵值對的鍵!!所有迴圈中,需要使用obj[keys]來取到每一個值!!!for-in 迴圈,遍歷時不僅
[每日一題]面試官問:for in和for of 的區別和原理?
關注「鬆寶寫程式碼」,精選好文,每日一題 時間永遠是自己的 每分每秒也都是為自己的將來鋪墊和增值 >作者:saucxs | songEagle ## 一、前言 2020.12.23 日剛立的 flag,每日一題,題目型別不限制,可以是:演算法題,面試題,闡述題等等。 本文是「每日一題」第 7
淺談mmap()和ioremap()的用法與區別
12只 設備 gpa 我們 之間 mmap ioremap shared set 一、mmap()mmap()函數是用來將設備內存線性地址映射到用戶地址空間。(1)首先映射基地址,再通過偏移地址尋址;(2)unsigned char *map_cru_base=(unsig
oracle 之 偽列 rownum 和 rowid的用法與區別
lena select 區別 name 繼續 class 重復 clas 重復數據 rownum的用法 select rownum,empno,ename,job from emp where rownum<6 可以得到小於6的值數據 select rownum,e
【轉】typedef和#define的用法與區別
++ 說明 運算符 lan body 精度 標識 gpo 幫助 typedef和#define的用法與區別 一、typedef的用法 在C/C++語言中,typedef常用來定義一個標識符及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配內存空間,實例像:
margin和padding的用法與區別--以及bug處理方式
使用 滿足 左右 ron 相互 一段 布局 方式 ont margin和padding的用法: (1)padding (margin) -left:10px; 左內 (外) 邊距(2)padding (margin) -right:10px;
ajaxForm() 和 ajaxSubmit() 的用法與區別
一、Query.form.js 介紹 Query.form.js 是一個 form 外掛,可以實現表單提交併在當前頁面中處理返回值,即 html 中提交表單並實現不跳轉頁面處理返回值。 二、下載地址 http://malsup.github.io/jquery.form.js