成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

數(shù)據(jù)類型對(duì)象

Half / 2854人閱讀

摘要:此時(shí),如果取消某一個(gè)變量對(duì)于原對(duì)象的引用,不會(huì)影響到另一個(gè)變量。因?yàn)閳A括號(hào)的里面,只能是表達(dá)式,所以確保大括號(hào)只能解釋為對(duì)象。

具體來(lái)說(shuō),如果一個(gè)屬性的enumerable為false,下面三個(gè)操作不會(huì)取到該屬性。

for..in循環(huán) 可繼承
Object.keys方法 不可
JSON.stringify方法 不可
object.getpropertynames都可以遍歷 不可繼承

概述
生成方法
鍵名
對(duì)象的引用
表達(dá)式還是語(yǔ)句?加()里都是表達(dá)式 不加為語(yǔ)句
屬性的操作
屬性的讀取
屬性的賦值
屬性的查看
屬性的刪除:delete 命令
屬性是否存在:in 運(yùn)算符
屬性的遍歷:for...in 循環(huán)
with 語(yǔ)句
參考鏈接

1.概述
1.1生成方法
對(duì)象就是一組“鍵值對(duì)”(key-value)的集合,是一種無(wú)序的復(fù)合數(shù)據(jù)集合。

1.2鍵名
1.2.1對(duì)象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名),所以加不加引號(hào)都可以
1.2.2對(duì)象的所有鍵名都是字符串(ES6 又引入了 Symbol 值也可以作為鍵名),所以加不加引號(hào)都可以
var obj = {
1: "a",
3.2: "b",
1e2: true,
1e-2: true,
.234: true,
0xFF: true
};

obj
// Object {
// 1: "a",
// 3.2: "b",
// 100: true,
// 0.01: true,
// 0.234: true,
// 255: true
// }

obj["100"] // true

1.2.3如果鍵名不符合標(biāo)識(shí)名的條件(比如第一個(gè)字符為數(shù)字,或者含有空格或運(yùn)算符),且也不是數(shù)字,則必須加上引號(hào),否則會(huì)報(bào)錯(cuò)

1.3對(duì)象的引用

拷貝的是內(nèi)存地址,指向同一個(gè)
如果不同的變量名指向同一個(gè)對(duì)象,那么它們都是這個(gè)對(duì)象的引用,也就是說(shuō)指向同一個(gè)內(nèi)存地址。修改其中一個(gè)變量,會(huì)影響到其他所有變量。

此時(shí),如果取消某一個(gè)變量對(duì)于原對(duì)象的引用,不會(huì)影響到另一個(gè)變量。

var o1 = {};
var o2 = o1;

o1 = 1;
o2 // {}
上面代碼中,o1和o2指向同一個(gè)對(duì)象,然后o1的值變?yōu)?,這時(shí)不會(huì)對(duì)o2產(chǎn)生影響,o2還是指向原來(lái)的那個(gè)對(duì)象。

但是,這種引用只局限于對(duì)象,如果兩個(gè)變量指向同一個(gè)原始類型的值。那么,變量這時(shí)都是值的拷貝。

var x = 1;
var y = x;

x = 2;
y // 1
上面的代碼中,當(dāng)x的值發(fā)生變化后,y的值并不變,這就表示y和x并不是指向同一個(gè)內(nèi)存地址。
1.4表達(dá)式還是語(yǔ)句?

如果要解釋為對(duì)象,最好在大括號(hào)前加上圓括號(hào)。因?yàn)閳A括號(hào)的里面,只能是表達(dá)式,所以確保大括號(hào)只能解釋為對(duì)象。

({ foo: 123 }) // 正確
({ console.log(123) }) // 報(bào)錯(cuò)
這種差異在eval語(yǔ)句(作用是對(duì)字符串求值)中反映得最明顯。

eval("{foo: 123}") // 123
eval("({foo: 123})") // {foo: 123

2.屬性的操作
2.1屬性的讀取

obj.p
obj["p"]

2.1.1如果使用方括號(hào)運(yùn)算符,鍵名必須放在引號(hào)里面,否則會(huì)被當(dāng)作變量處理。

var foo = "bar";

var obj = {
foo: 1,
bar: 2
};

obj.foo // 1
obj[foo] // 2

2.1.2方括號(hào)運(yùn)算符內(nèi)部還可以使用表達(dá)式。

obj["hello" + " world"]
obj[3 + 3]
2.1.3數(shù)字鍵可以不加引號(hào),因?yàn)闀?huì)自動(dòng)轉(zhuǎn)成字符串。注意,數(shù)值鍵名不能使用點(diǎn)運(yùn)算符(因?yàn)闀?huì)被當(dāng)成小數(shù)點(diǎn)),只能使用方括號(hào)運(yùn)算符

var obj = {
0.7: "Hello World"
};

obj["0.7"] // "Hello World"
obj[0.7] // "Hello World"

2.2屬性的賦值
2.3屬性的查看
查看一個(gè)對(duì)象本身的所有屬性,可以使用Object.keys方法。
不可遍歷不可遍歷的

2.4屬性的刪除:delete 命令

返回真假
刪除一個(gè)不存在的屬性,delete不報(bào)錯(cuò),而且返回true
刪除一個(gè)construct不可的為假

delete命令只能刪除對(duì)象本身的屬性,無(wú)法刪除繼承的屬性(關(guān)于繼承參見(jiàn)《面向?qū)ο缶幊獭氛鹿?jié))。

var obj = {};
delete obj.toString // true
obj.toString // function toString() { [native code] }
2.5屬性是否存在:in 運(yùn)算符
可以繼承的無(wú)關(guān)遍歷 在不在而已
這時(shí),可以使用對(duì)象的hasOwnProperty方法判斷一下,是否為對(duì)象自身的屬性。

var obj = {};
if ("toString" in obj) {
console.log(obj.hasOwnProperty("toString")) // false
}

2.6屬性的遍歷:for...in 循環(huán)

跳過(guò)不可遍歷 可以繼承

舉例來(lái)說(shuō),對(duì)象都繼承了toString屬性,但是for...in循環(huán)不會(huì)遍歷到這個(gè)屬性。

var obj = {};

// toString 屬性是存在的
obj.toString // toString() { [native code] }

for (var p in obj) {
console.log(p);
} // 沒(méi)有任何輸出
上面代碼中,對(duì)象obj繼承了toString屬性,該屬性不會(huì)被for...in循環(huán)遍歷到,因?yàn)樗J(rèn)是“不可遍歷”的

如果繼承的屬性是可遍歷的,那么就會(huì)被for...in循環(huán)遍歷到。但是,一般情況下,都是只想遍歷對(duì)象自身的屬性,所以使用for...in的時(shí)候,應(yīng)該結(jié)合使用hasOwnProperty方法,在循環(huán)內(nèi)部判斷一下,某個(gè)屬性是否為對(duì)象自身的屬性。

var person = { name: "老張" };

for (var key in person) {
if (person.hasOwnProperty(key)) {

console.log(key);

}
}
// name

3.with 語(yǔ)句
里面必須是已有的屬性,否則為全局變量
with (對(duì)象) {
語(yǔ)句;
}
它的作用是操作同一個(gè)對(duì)象的多個(gè)屬性時(shí),提供一些書寫的方便

// 例一
var obj = {
p1: 1,
p2: 2,
};
with (obj) {
p1 = 4;
p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;

// 例二
with (document.links[0]){
console.log(href);
console.log(title);
console.log(style);
}
// 等同于
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style

var obj = {};
with (obj) {
p1 = 4;
p2 = 5;
}

obj.p1 // undefined
p1 // 4

一個(gè)很大的弊病,就是綁定對(duì)象不明確,只能運(yùn)營(yíng)時(shí)判斷,拖慢運(yùn)行速度

不要使用with語(yǔ)句,可以考慮用一個(gè)臨時(shí)變量代替with。

with(obj1.obj2.obj3) {
console.log(p1 + p2);
}

// 可以寫成
var temp = obj1.obj2.obj3;
console.log(temp.p1 + temp.p2);

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/106013.html

相關(guān)文章

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

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

    OldPanda 評(píng)論0 收藏0
  • 細(xì)數(shù)判斷數(shù)據(jù)類型的各種方法

    摘要:可用于判斷多種數(shù)據(jù)類型基本數(shù)據(jù)類型和內(nèi)置對(duì)象,然而對(duì)于一些自定義構(gòu)造函數(shù)生成的對(duì)象就不能進(jìn)行判斷了。判斷是不是所有數(shù)據(jù)類型中,只有不等于它本身判斷數(shù)組的方法除了上文提到的三種方法可判斷外,還有一個(gè)構(gòu)造函數(shù)自帶的方法可判斷。 數(shù)據(jù)類型的分類 要想判斷數(shù)據(jù)類型,首先要知道數(shù)據(jù)類型的分類。數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。 基本數(shù)據(jù)類型 基本數(shù)據(jù)類型有 五 種,ES6中新加了第 六 種...

    hoohack 評(píng)論0 收藏0
  • JS的{} + {}與{} + []的結(jié)果是什么?

    摘要:對(duì)于與的設(shè)計(jì)在中所設(shè)計(jì)的純對(duì)象類型的與方法,它們的返回如下方法返回值對(duì)象本身。與三個(gè)強(qiáng)制轉(zhuǎn)換函數(shù),所對(duì)應(yīng)的就是在標(biāo)準(zhǔn)中的三個(gè)內(nèi)部運(yùn)算轉(zhuǎn)換的對(duì)照表。 在JS中的運(yùn)算符共同的情況中,(+)符號(hào)是很常見(jiàn)的一種,它有以下的使用情況: 數(shù)字的加法運(yùn)算,二元運(yùn)算 字符串的連接運(yùn)算,二元運(yùn)算,最高優(yōu)先 正號(hào),一元運(yùn)算,可延伸為強(qiáng)制轉(zhuǎn)換其他類型的運(yùn)算元為數(shù)字類型 當(dāng)然,如果考慮多個(gè)符號(hào)一起使用時(shí),...

    2json 評(píng)論0 收藏0
  • javaScript中簡(jiǎn)單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型賦值拷貝的理解

    摘要:原理中的數(shù)據(jù)類型分為兩類,簡(jiǎn)單數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型簡(jiǎn)單數(shù)據(jù)類型包括數(shù)值,字符串布爾值復(fù)雜數(shù)據(jù)類型對(duì)象即屬性的集合先了解數(shù)據(jù)類型在計(jì)算機(jī)中的存儲(chǔ)簡(jiǎn)單數(shù)據(jù)類型存儲(chǔ)的是對(duì)象的原始數(shù)據(jù)復(fù)雜數(shù)據(jù)類型對(duì)象的原型也是引用類型,對(duì)象類型的值單獨(dú)存放。 在js中將一個(gè)值a賦值給另一個(gè)值b,在什么情況下改變了b的值會(huì)影響a的值?在知道哪種類型賦值后改變值會(huì)影響原對(duì)象的情況下該怎么做才不會(huì)影響原對(duì)象?就是...

    Julylovin 評(píng)論0 收藏0
  • java學(xué)習(xí)筆記 —— 自動(dòng)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換

    摘要:引用數(shù)據(jù)類型轉(zhuǎn)換由的繼承和向上轉(zhuǎn)型,子類可以很自然地轉(zhuǎn)換為父類對(duì)象,即父類類型可以直接引用子類對(duì)象,但是子類類型不能直接引用父類對(duì)象,需要進(jìn)行強(qiáng)制轉(zhuǎn)換。但是將功能較弱的類型父類強(qiáng)制轉(zhuǎn)功能較強(qiáng)的對(duì)象子類時(shí),就不一定可以行了。 1、引用數(shù)據(jù)類型轉(zhuǎn)換: 由java的繼承和向上轉(zhuǎn)型,子類可以很自然地轉(zhuǎn)換為父類對(duì)象,即父類類型可以直接引用子類對(duì)象,但是子類類型不能直接引用父類對(duì)象,需要進(jìn)行強(qiáng)制轉(zhuǎn)...

    AlienZHOU 評(píng)論0 收藏0
  • 《Java編程思想》讀書筆記-類與對(duì)象

    摘要:類最基本的作用,在于通過(guò)類獲取到相應(yīng)的對(duì)象,在向?qū)ο蟀l(fā)送消息時(shí)以期望對(duì)象做某些特定的事情。先導(dǎo)概念引用中一切皆對(duì)象,因此采用一個(gè)指向?qū)ο蟮囊脕?lái)操縱對(duì)象。對(duì)象可以存活于作用域之外。 歡迎各位讀者關(guān)注我的微信公眾號(hào),共同探討Java相關(guān)技術(shù)。生命不止,學(xué)習(xí)不休! showImg(https://segmentfault.com/img/bVboaBO?w=129&h=129); 也許你慢...

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

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

0條評(píng)論

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