日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

js 关键字 in 的使用方法

發(fā)布時(shí)間:2025/6/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js 关键字 in 的使用方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  寫js的時(shí)候需要遍歷一個(gè)對(duì)象的屬性,把屬性名和屬性值都提出來(lái),之前沒(méi)遇到這種需求,查了一下可以用for in的方式.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 var?obj = { ????"key1":"value1", ????"key2":"value2", ????"key3":"value3" }; function?EnumaKey(){ ????for(var?key?in?obj ){ ????????alert(key); ????} } function?EnumaVal(){ ????for(var?key?in?obj ){ ????????alert(obj[key]); ????} }

數(shù)組也可以這樣遍歷,但不推薦,因?yàn)椴荒鼙WC順序,而且如果在Array的原型上添加了屬性,這個(gè)屬性也會(huì)被遍歷出來(lái)。

for-in循環(huán)應(yīng)該用在非數(shù)組對(duì)象的遍歷上,使用for-in進(jìn)行循環(huán)也被稱為“枚舉”。

從技術(shù)上將,你可以使用for-in循環(huán)數(shù)組(因?yàn)镴avaScript中數(shù)組也是對(duì)象),但這是不推薦的。因?yàn)槿绻麛?shù)組對(duì)象已被自定義的功能增強(qiáng),就可能發(fā)生邏輯錯(cuò)誤。另外,在for-in中,屬性列表的順序(序列)是不能保證的。所以最好數(shù)組使用正常的for循環(huán),對(duì)象使用for-in循環(huán)。

有個(gè)很重要的hasOwnProperty()方法,當(dāng)遍歷對(duì)象屬性的時(shí)候可以過(guò)濾掉從原型鏈上下來(lái)的屬性。

思考下面一段代碼:

// 對(duì)象 var man = {hands: 2,legs: 2,heads: 1 };// 在代碼的某個(gè)地方 // 一個(gè)方法添加給了所有對(duì)象 if (typeof Object.prototype.clone === "undefined") {Object.prototype.clone = function () {}; }

在這個(gè)例子中,我們有一個(gè)使用對(duì)象字面量定義的名叫man的對(duì)象。在man定義完成后的某個(gè)地方,在對(duì)象原型上增加了一個(gè)很有用的名叫 clone()的方法。此原型鏈?zhǔn)菍?shí)時(shí)的,這就意味著所有的對(duì)象自動(dòng)可以訪問(wèn)新的方法。為了避免枚舉man的時(shí)候出現(xiàn)clone()方法,你需要應(yīng)用hasOwnProperty()方法過(guò)濾原型屬性。如果不做過(guò)濾,會(huì)導(dǎo)致clone()函數(shù)顯示出來(lái),在大多數(shù)情況下這是不希望出現(xiàn)的。

// 1. // for-in 循環(huán) for (var i in man) {if (man.hasOwnProperty(i)) { // 過(guò)濾console.log(i, ":", man[i]);} } /* 控制臺(tái)顯示結(jié)果 hands : 2 legs : 2 heads : 1 */// 2. // 反面例子: // for-in loop without checking hasOwnProperty() for (var i in man) {console.log(i, ":", man[i]); } /* 控制臺(tái)顯示結(jié)果 hands : 2 legs : 2 heads : 1 clone: function() */

另外一種使用hasOwnProperty()的形式是取消Object.prototype上的方法。像這樣:

for (var i in man) {if (Object.prototype.hasOwnProperty.call(man, i)) { // 過(guò)濾console.log(i, ":", man[i]);} }

其好處在于在man對(duì)象重新定義hasOwnProperty情況下避免命名沖突。也避免了長(zhǎng)屬性查找對(duì)象的所有方法,你可以使用局部變量“緩存”它。

var i, hasOwn = Object.prototype.hasOwnProperty; for (i in man) {if (hasOwn.call(man, i)) { // 過(guò)濾console.log(i, ":", man[i]);} }

嚴(yán)格來(lái)說(shuō),不使用hasOwnProperty()并不是一個(gè)錯(cuò)誤。根據(jù)任務(wù)以及你對(duì)代碼的自信程度,你可以跳過(guò)它以提高些許的循環(huán)速度。但是當(dāng)你對(duì)當(dāng)前對(duì)象內(nèi)容(和其原型鏈)不確定的時(shí)候,添加hasOwnProperty()更加保險(xiǎn)些。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

javascript中in關(guān)鍵字還有下面的作用

定義:

in操作符用來(lái)判斷某個(gè)屬性屬于某個(gè)對(duì)象,可以是對(duì)象的直接屬性,也可以是通過(guò)prototype繼承的屬性。(參見(jiàn)hasOwnProperty)

注意事項(xiàng):

對(duì)于一般的對(duì)象屬性需要用字符串指定屬性的名稱

如: var mycar = {make: "Honda", model: "Accord", year: 1998}; "make" in mycar? // returns true "model" in mycar // returns true

?

對(duì)于數(shù)組屬性需要指定數(shù)字形式的索引值來(lái)表示數(shù)組的屬性名稱(固有屬性除外,如length)。

// Arrays var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); 0 in trees??????? // returns true 3 in trees??????? // returns true 6 in trees??????? // returns false "bay" in trees??? // returns false (you must specify the index number, ????????????????? // not the value at that index) "length" in trees // returns true (length is an Array property) ?

in的右邊必須是一個(gè)對(duì)象,如:你可以指定一個(gè)用String構(gòu)造器生成的,但是不能指定字符串直接量的形式:

var color1 = new String("green"); "length" in color1 // returns true var color2 = "coral"; "length" in color2 // generates an error (color is not a String object) ?

如果你使用delete操作符刪除了一個(gè)屬性,再次用in檢查時(shí),會(huì)返回false,如:

var mycar = {make: "Honda", model: "Accord", year: 1998}; delete mycar.make; "make" in mycar;? // returns false ? var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); delete trees[3]; 3 in trees; // returns false

?

如果你把一個(gè)屬性值設(shè)為undefined,但是沒(méi)有使用delete操作符,使用in檢查,會(huì)返回true.

var mycar = {make: "Honda", model: "Accord", year: 1998}; mycar.make = undefined; "make" in mycar;? // returns true

?

var trees = new Array("redwood", "bay", "cedar", "oak", "maple"); trees[3] = undefined; 3 in trees; // returns true



1.For...In 聲明用于對(duì)數(shù)組或者對(duì)象的屬性進(jìn)行循環(huán)/迭代操作。

?

  對(duì)于數(shù)組?,迭代出來(lái)的是數(shù)組元?素,對(duì)于對(duì)象?,迭代出來(lái)的是對(duì)象的屬性;

Js代碼??
  • var?x??
  • var?mycars?=?new?Array()??
  • mycars[0]?=?"Saab"??
  • mycars[1]?=?"Volvo"??
  • mycars[2]?=?"BMW"??
  • ??
  • for?(x?in?mycars)??
  • {??
  • ????document.write(mycars[x]?+?"<br?/>")??
  • }??
  • ?

    輸出為:

    ?

    Java代碼??
  • Saab??
  • Volvo??
  • BMW??

  • 對(duì)象示例: Js代碼??
  • var?obj?=?{??
  • ????w:?"wen",??
  • ????j:?"jian",??
  • ????b:?"bao"??
  • }??
  • for(var?v?in?obj){??
  • ??document.write(v)+"<br/>";??
  • ??
  • }??
  • 輸出為: Java代碼??
  • w??
  • j??
  • b??
  • 2.判斷對(duì)象是否為數(shù)組/對(duì)象的元素/屬性: 格式:(變量 in 對(duì)象)......注意,,,

      當(dāng)“對(duì)象”為數(shù)組時(shí),“變量”指的是數(shù)組的“索引”;

      當(dāng)“對(duì)象”為對(duì)象是,“變量”指的是對(duì)象的“屬性”。

    ?

    數(shù)組示例:

    Js代碼??
  • var?arr?=?["a","b","2","3","str"];??
  • var?result?=?("b"?in?arr);??
  • var?result1?=?(4?in?arr);??
  • document.write(result+"<br>");??
  • document.write(result1+"<br>");??
  • 輸出為: Java代碼??
  • false??
  • true??
  • 對(duì)象示例: Js代碼??
  • var?obj={??
  • ?????????w:"wen",??
  • ?????????j:"jian",??
  • ?????????b:"bao"??
  • ???????????
  • ????}??
  • ??????
  • var?result=(2?in?obj);??????
  • var?result1=("j"?in?obj);??
  • ??
  • document.write(result)+"<br/>";??
  • document.write(result1)+"<br/>";??
  • 輸出為: Java代碼??
  • false??
  • true??
  • 總結(jié)

    以上是生活随笔為你收集整理的js 关键字 in 的使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。