Object

作者: 饥人谷_Chou | 来源:发表于2017-10-24 21:02 被阅读0次

    对象 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

    相关文章

      网友评论

          本文标题:Object

          本文链接:https://www.haomeiwen.com/subject/plvhkxtx.html