Object

对象 Object

对象是一些相互关联的数据和功能(通常由若干变量和函数组成,被称为对象的属性和方法)的集合。

{  

属性名:属性值

  方法名:函数

}

声明对象

let ljh={

        name:{zh:'猥琐下',en :'wsx'},

        height:179,

        slzm :['是是是','对对对','说的都对','没错没错'],

}

声明包含属性和方法的数组

let babies=[{ name:{ zh:'周小凌', en:'Hathaway'}, gender:'女'}]    //声明一个对象数组

let 宝贝=[{ 名字:{ 中文:'周小凌', 英文:'Hathaway'}, 性别:'女'}]


let  jay={  name:{ zh:'周杰伦', en:'Jay'},

 height:175,  

children:babies,                                                                    //引用babies 对象数组

songs:['星晴','双节棍','七里香','简单爱','青花瓷','告白气球'],  

company:{ name:'杰威尔音乐有限公司', location:'台北', year:{ founded:2007} },

like() {return'哎哟,不错哦!'},                //   方法

intro:function(lang='zh') {

returnlang==='zh'?`大家好,我是${this.name.zh}。`:`Hi, I'm${this.name.en}.`}

}



const 周杰伦={  名字:{ 中文:'周杰伦', 英文:'Jay'},
身高:175, 
子女:宝贝, 
作品:['星晴','双节棍','七里香','简单爱','青花瓷','告白气球'], 
公司:{ 名字:'杰威尔音乐有限公司', 所在地:'台北', 创办年份:2007}, 
点赞() {return'哎哟,不错哦!'}, 
自我介绍:function(语言='中文') {return语言==='中文'?`大家好,我是${this.名字.中文}。`:`Hi, I'm${this.名字.英文}.`}}


另外声明对象的方法    new Object                     //new是可选的

let  hannah=new Object()

hannah.name={ zh:'昆凌', en:'Hannah'}

hannah.height=165

hannah.children=babies

hannah.catwalk=function() {return '🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈';}

hannah.birth=function(gender,name) { this.children.push({ gender, name });  };


不使用new

const  昆凌=Object({  

名字:{ 中文:'昆凌', 英文:'Hannah'},  

身高:165,  子女:宝贝,  

猫步() {return'🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈'; },  

分娩:function(婴儿性别, 中英文名) {this.子女.push({ 性别:婴儿性别, 名字:中英文名 }) ; },  

自我介绍:function(语言='中文') {return语言==='中文'?`大家好,我是${this.名字.中文}。`:`Hi, I'm${this.名字.英文}.`;} 

})

通过.访问对象属性

>ljh.name.zh
→猥琐下

>ljh.slzm[2]
→说的都对


>jay.like()        //访问 like()方法
→' 哎呦,不错哦'

>hannah.catwalk()                //hannah的catwalk属性函数  catwalk()
→"🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈🐈"

>hannah.children[0].name.zh          //访问hannah的【children() = babies】变量下的数组下标 0 的name的zh数组
→"周小凌"

通过 [ ] 也可以访问对象的属性和方法,当属性名有包含有空格和特殊字符串,或 属性名是变量时,一般使用 [ ] 

>jay['height']

→175>

jay['company']['location']    //周杰伦['公司']['所在地']

→"台北">

jay['intro']()         //周杰伦['自我介绍']()

→"大家好,我是周杰伦。"

>阿星['如 来 神 掌']

→"🖐🖐🖐🖐🖐"

>['name','height'].map(function(property) {returnjay[property] })

→ [{ zh:'周杰伦', en:'Jay'},175]

>jay[prompt('查看 jay 的哪个属性?','songs')]→

>周杰伦[prompt('周杰伦的(?)是1979年1月18日。')]='1979年1月18日'

→"1979年1月18日"

语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·蘭丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。 举例来说,许多程序语言提供专门的语法来对数组中的元素进行引用和更新。

let {name,songs,height }= jay


Object.keys()

通过用Object.keys()ES5 方法 可以获取对象的的所有属性名。

Object.keys(jay)

["name","height","children","songs","company","like","intro"]

修改对象

jay.age = 38                //创建并且赋值,  jay的age = 38

jay.age -= 10              //jay 减去 10  age = 20

hannah.husband=jay

→ {name:Object, height:175, children:Array(1), songs:Array(6), company:Object}


hannah.husband是对 jay 数组的引用(Reference),因此以下代码会直接修改jay。

>hannah.jay.name.zh='小周周'

"小周周"

jay.name.zh

"小周周"

delete     delete

delete可用于删除对象的属性或方法

>delete   jay.songs            //delete 周杰伦.作品

→true

>jay.songs//周杰伦.作品

→undefined

>delete    hannah.catwalk             //delete 昆凌.猫步

→true

>hannah.catwalk    //     昆凌.猫步

→undefined

delete操作总是返回true,无论属性或方法是否存在


this

this指当前对象,因此jay.intro()里面的this就是jay,hannah.intro()里面的this就是hannah。

this是当前对象,因此jay,intro()里面的this就是jay,hannah.intro()里面的this就是hannah。

>jay.intro()//周杰伦.自我介绍()

→ 大家好,我是周杰伦。

>hannah.intro()//昆凌.自我介绍()

→ 大家好,我是昆凌。


in

in用于检查对象是否具有某个属性或者方法。

>'wife' in jay

→true>

'妻子' in jay

→false>

'妻子' in 周杰伦

→true

以上代码中的引号不能省略,如果省略 JavaScript 会认为那是一个变量。

>let wife = '妻子'

→undefined

>wife in jay

→false

> wife in 周杰伦

→true



遍历对象

for...in 用于遍历对象的属性和方法,      //for...in 也可以用来遍历数组,但是并不推荐。

for(let key in jay ){
 console.log( key , jay[key]);
}

for( let 属性 in 周杰伦){
 console.log(属性 , 周杰伦[属性])
}

结合 for...in   in 和 this  实现  周杰伦,.专辑.播放()方法

周杰伦.专辑.播放 =function(专辑或者单曲) {
let 专辑名称= 专辑或者单曲;
if(专辑名称 in this ){
return `播放专辑 ${专辑名称} ,—发行年份${this[专辑名称].发行年份}`;}

let 单曲名称 = 专辑或者单曲
for( let 专辑名 in this ){
let 专辑曲目 = this[专辑名]['专辑曲目'];
if (Array.isArray(专辑曲目)&&专辑曲目.indexOf(单曲名称) > -1 ){
return `播放单曲 ${单曲名称} ,—来自专辑${专辑名}`}
}

return `对不起,没有收录这张专辑或这首单曲。`

}


英文对象
周杰伦.专辑.play = function (aors){
let album= aors;
if( album in this ){
return ` 播放专辑${album} —发行年份${this[album].发行年份}。`}

let song = aors  ; 
for( let al in this ){
let songs = this[al]['专辑曲目'];
if( Array.isArray(songs) && songs.indexOf(song)  > -1 ){
return ` 播放单曲 ${song} — 来自专辑 ${al} `}
}
return `对不起,没有收录这张专辑或这首单曲。`

}

引用类型

对象(还有数组,函数等)属于引用类型,因此,jay.childrenhannah.childrenbabies都是引用着同一个数组。

hannah.children.push({ name:{ zh:'周小伦', en:'Jason'}, gender:'男'})//hannah 生二胎
→2
>jay.children
→ [{ name:{ zh:'小周周', en:'Hathaway'}, gender:'女'} 
     { name:{ zh:'周小伦', en:'Jason'}, gender:'男'}]

当==或===作用于对象的时候,实际是在问:这两个变量引用的是用一个对象吗?

>jay.children===hannah.children//周杰伦.子女 === 昆凌.子女
→true
>jay.children===babies
→true
>hannah.children===babies
→true
>empty===空对象
→false
>{ name:'韩梅梅'}==={ name:'韩梅梅'}
→false



s

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容