国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

js對(duì)象

seal_de / 2489人閱讀

摘要:也是一個(gè)隱藏函數(shù),會(huì)在設(shè)置屬性值時(shí)調(diào)用當(dāng)只對(duì)屬性定義而沒(méi)有定義時(shí),此屬性進(jìn)行復(fù)制操作時(shí)將被忽略,賦值會(huì)失敗但是不會(huì)報(bào)錯(cuò)檢測(cè)屬性對(duì)象可以看作是屬性的集合,因此我們會(huì)經(jīng)常檢測(cè)集合中成員的所屬關(guān)系,即判斷某個(gè)屬性是否存在于某個(gè)對(duì)象中。

對(duì)象屬性描述符

可寫(xiě)(writable attribute),表明是否可以設(shè)置該屬性的值

可枚舉(enumerable attribute),表明是否可以通過(guò)for/in循環(huán)返回該值

可配置(configurable attribute),表明是否可以刪除或修改該屬性
在es5之前,通過(guò)代碼給對(duì)象創(chuàng)建的所有屬性都是可寫(xiě)的、可枚舉的和可配置的。在es5中則可以對(duì)這些特性加以配置

writable

示例代碼:

var one = {}
Object.defineProperty(one, "a", {
  value : 1,
  writable : false,
  configurable: true,
  enumerable: true
})
one.a = 2;
console.log(one.a) //1

如示例,當(dāng)將對(duì)象的屬性的writable特性定義為false時(shí),對(duì)屬性值的修改就會(huì)靜默失敗

configurable

只要屬性是可配置的,就可以使用defineProperty()方法來(lái)修改屬性:

var one = {}
Object.defineProperty(one, "a", {
  value : 1,
  writable : true,
  configurable: false,
  enumerable: true
})
console.log(one.a) //1
one.a = 2;
console.log(one.a) //2
delete one.a
console.log(one.a) //2
Object.defineProperty(one, "a", {
  value: 3,
  writable: true,
  configurable: true,
  enumerable: true
}) //TypeError

當(dāng)屬性的configurable特性設(shè)置為false時(shí),此屬性無(wú)法使用delete刪除,操作會(huì)默認(rèn)失敗,因?yàn)榇藢傩允遣豢膳渲玫模瑫r(shí)無(wú)法再修改configurable特性,會(huì)產(chǎn)生一個(gè)TypeError,即configurable修改成false是單向操作

enumerable

此描述符控制的是屬性是否會(huì)出現(xiàn)在對(duì)象的屬性枚舉中,比如說(shuō)for..in循環(huán)。如果把enumerable設(shè)置成false,這個(gè)屬性就不會(huì)出現(xiàn)在枚舉中,雖然可以正常訪問(wèn)。

var one = {b:2}
Object.defineProperty(one, "a", {
  value : 1,
  writable : true,
  configurable: true,
  enumerable: false
})
for (var key in one) {
  console.log(key + "---" + one[key]) //b---2
}

如上例所示,one對(duì)象定義了一個(gè)不可枚舉的屬性a,那么在for..in循環(huán)遍歷時(shí)就無(wú)法獲取到a屬性,當(dāng)你不希望某些特殊屬性出現(xiàn)在枚舉中,那就把它設(shè)置成enumerable:false

Getter和Setter

在es5中可以使用getter和setter部分改寫(xiě)默認(rèn)操作,但是只能應(yīng)用在當(dāng)個(gè)屬性上,無(wú)法應(yīng)用在整個(gè)對(duì)象上。getter是一個(gè)隱藏函數(shù),會(huì)在獲取屬性值時(shí)調(diào)用。setter也是一個(gè)隱藏函數(shù),會(huì)在設(shè)置屬性值時(shí)調(diào)用

var one = {
  get a() {
    return this._a_;
  },
  set a(val) {
    this._a_ = val * 2
  }
}
one.a = 2
console.log(one.a) //4

Tips:當(dāng)只對(duì)屬性定義getter而沒(méi)有定義setter時(shí),此屬性進(jìn)行復(fù)制操作時(shí)將被忽略,賦值會(huì)失敗但是不會(huì)報(bào)錯(cuò)

檢測(cè)屬性

js對(duì)象可以看作是屬性的集合,因此我們會(huì)經(jīng)常檢測(cè)集合中成員的所屬關(guān)系,即判斷某個(gè)屬性是否存在于某個(gè)對(duì)象中。可以通過(guò)in運(yùn)算符、hasOwnProperty()和propertyIsEnumerable()方法來(lái)檢測(cè)

in和hasOwnProperty

in運(yùn)算符左側(cè)是屬性名,右側(cè)是對(duì)象,如果對(duì)象的自由屬性或繼承屬性中包含這個(gè)屬性則返回true,對(duì)象的hasOwnProperty()方法用來(lái)檢測(cè)給定的名字是否是對(duì)象的自有屬性。對(duì)于繼承屬性將返回false:

var one = {
  a:1
}
console.log("a" in one) //true
console.log("b" in one) //false
console.log("toString" in one) //true
console.log(one.hasOwnProperty("a")) //true
console.log(one.hasOwnProperty("b")) //false
console.log(one.hasOwnProperty("toString")) //false
propertyIsEnumerable

propertyIsEnumerable()會(huì)檢查給定的屬性是否直接存在于對(duì)象中并且滿(mǎn)足enumerable:true:

var one = {}
Object.defineProperty(one, "a", {
  value : 1,
  enumerable: true
})
Object.defineProperty(one, "b", {
  value : 2,
  enumerable: false
})
console.log(one.propertyIsEnumerable("a")) //true
console.log(one.propertyIsEnumerable("b")) //false
console.log(Object.keys(one)) //["a"]
console.log(Object.getOwnPropertyNames(one)) //["a","b"]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88655.html

相關(guān)文章

  • JS中數(shù)據(jù)類(lèi)型、內(nèi)置對(duì)象、包裝類(lèi)型對(duì)象、typeof關(guān)系

    摘要:平時(shí)在復(fù)習(xí)基礎(chǔ)知識(shí)時(shí),經(jīng)常會(huì)遇到數(shù)據(jù)類(lèi)型基礎(chǔ)數(shù)據(jù)類(lèi)型內(nèi)置對(duì)象包裝類(lèi)型對(duì)象,檢測(cè)數(shù)據(jù)類(lèi)型時(shí),用到的值,感覺(jué)都差不多,但是又有差異。值與數(shù)據(jù)類(lèi)型關(guān)系對(duì)比下圖,即可知值相較于基礎(chǔ)數(shù)據(jù)類(lèi)型少多 平時(shí)在復(fù)習(xí)JS基礎(chǔ)知識(shí)時(shí),經(jīng)常會(huì)遇到JS數(shù)據(jù)類(lèi)型、基礎(chǔ)數(shù)據(jù)類(lèi)型、內(nèi)置對(duì)象、包裝類(lèi)型對(duì)象,檢測(cè)數(shù)據(jù)類(lèi)型時(shí),用到的typeof值,感覺(jué)都差不多,但是又有差異。今天特地整理下,方便理解。 JS數(shù)據(jù)類(lèi)型 基礎(chǔ)數(shù)...

    OldPanda 評(píng)論0 收藏0
  • 精讀《JS 引擎基礎(chǔ)之 Shapes and Inline Caches》

    摘要:概述的解釋器優(yōu)化器代碼可能在字節(jié)碼或者優(yōu)化后的機(jī)器碼狀態(tài)下執(zhí)行,而生成字節(jié)碼速度很快,而生成機(jī)器碼就要慢一些了。比如有一個(gè)函數(shù),從獲取值引擎生成的字節(jié)碼結(jié)構(gòu)是這樣的指令是獲取參數(shù)指向的對(duì)象,并存儲(chǔ)在,第二步則返回。 1 引言 本期精讀的文章是:JS 引擎基礎(chǔ)之 Shapes and Inline Caches 一起了解下 JS 引擎是如何運(yùn)作的吧! JS 的運(yùn)作機(jī)制可以分為 AST 分...

    Tecode 評(píng)論0 收藏0
  • jQuery Deferred對(duì)象

    摘要:給普通的操作指定回調(diào)函數(shù)對(duì)象的最大優(yōu)點(diǎn),就是它把這一套回調(diào)函數(shù)接口,從操作擴(kuò)展到了所有操作。方法用于指定對(duì)象狀態(tài)為已失敗時(shí)的回調(diào)函數(shù)。執(zhí)行完畢執(zhí)行成功執(zhí)行失敗接收一個(gè)或多個(gè)對(duì)象作為參數(shù),為其指定回調(diào)函數(shù)。 什么是deferred對(duì)象 開(kāi)發(fā)網(wǎng)站的過(guò)程中,我們經(jīng)常遇到某些耗時(shí)很長(zhǎng)的javascript操作。其中,既有異步的操作(比如ajax讀取服務(wù)器數(shù)據(jù)),也有同步的操作(比如遍歷一個(gè)大型...

    baoxl 評(píng)論0 收藏0
  • [譯]執(zhí)行上下文、作用域鏈和JS內(nèi)部機(jī)制

    摘要:執(zhí)行上下文作用域鏈和內(nèi)部機(jī)制一執(zhí)行上下文執(zhí)行上下文是代碼的執(zhí)行環(huán)境,它包括的值變量對(duì)象和函數(shù)。創(chuàng)建作用域鏈一旦可變對(duì)象創(chuàng)建完,引擎就開(kāi)始初始化作用域鏈。 執(zhí)行上下文、作用域鏈和JS內(nèi)部機(jī)制(Execution context, Scope chain and JavaScript internals) 一、執(zhí)行上下文 執(zhí)行上下文(Execution context EC)是js代碼的執(zhí)...

    caozhijian 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<