博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript语言精粹:对象——读书笔记
阅读量:7125 次
发布时间:2019-06-28

本文共 2755 字,大约阅读时间需要 9 分钟。

1 对象

简单数据类型

  • number
  • string
  • boolean
  • null
  • undefined

对象类型

  • array
  • function
  • regularExpression
  • object

对象简介

  • 可变的键控集合,属性的容器,无类型
  • 属性:任意字符串(包括空字符串)
  • 属性值:非undefined

1.1 对象字面量

var empty_object = {};var stooge = {    "first-name":"Jerome";    "last-name":"Howard"};var flight = {    airline:"Oceanic",    number:815,    departure:{        IATA:"SYD",        time:"2004-09-22 14:55",        city:"Sydney"    },    arrival:{        IATA:"LAX",        time:"2004-09-23 10:42",        city:"Los Angeles"    }};复制代码

1.2 检索

stooge["first-name"]    //"Jerome"flight.departure.IATA   //"SYD"复制代码

1.2.1 检索一个并不存在的成员属性,返回undefined

stooge["middle-name"]   //underfined复制代码

1.2.2 || 填充默认值

var middle = stooge["middle-name"] || 'none'  //middle='none'复制代码

1.2.3 && undefined的成员属性取值

stooge["middle-name"]                                   //undefinedstooge["middle-name"].model                             //throw typeErrorstooge['middle-name'] && stooge['middle-name'].model    //undefined复制代码

1.3 更新

stooge["middle-name"] = 'Ning'        //扩充stooge["first-name"] = "Zhang"        //覆盖复制代码

1.4 引用

var x = stooge;x.nickName = 'Curly';var nick = stooge.nickName;         //x,stooge指向同一个对象 'Curly'var a = {}, b = {}, c = {};         //a,b,c分别指向3个不同的空对象a = b = c = {};                     //a,b,c指向同一个空对象复制代码

1.5 原型

  • 每个对象都连接到一个原型对象,并可以从中继承属性。
  • 通过对象字面量创建的对象连接到Object.prototype,它是JavaScript的标配对象。
  • 当你创建一个新对象时,可以选择某个对象作为它的原型。
Object.myCreate = function (obj) {    var F = function () { };    F.prototype = obj;    return new F();}var another_stooge = Object.myCreate(stooge);复制代码
  • 原型连接只有在检索时使用,若获取某对象属性值,但该对象没有该属性,JavaScript会尝试从该对象的原型对象上获取此属性值,以此类推,直到Object.prototype。如果想要的属性完全不存在于原型链中,返回undefined。这个过程称为委托
  • 原型关系是一种动态关系。如果添加一个属性到原型中,该属性立即对所有基于该原型的创建对象都可见。
stooge.profession = 'actor';another_stooge.profession   //'actor'复制代码

1.6 反射

typeof flight.number    //numbertypeof flight.status    //stringtypeof flight.arrival   //objecttypeof flight.mainfest  //undefined复制代码

原型链任何属性都能产生值。

typeof flight.toString  //functiontypeof flight.constructor   //function复制代码

hasOwnProperty不会检查原型链

flight.hasOwnProperty('number') //trueflight.hasOwnProperty('constructor')   //false复制代码

1.7 枚举

for in 列出所有属性包括函数和原型链上的属性。

var name;for(name in another_stooge){    if(typeof another_stooge[name]!=='function'){   //排除函数        console.log(name,another_stooge[name]);    }}复制代码

for in中遍历的属性名顺序不确定。使用for代替。

var i;var properties=['first-name','middle-name','last-name','profession'];for(i=0;i

1.8 删除

删除不会触及原型链上的对象。

another_stooge.nickname     //'Moe'delete another_stooge.nickname  //删除nickname,使原型链上的属性暴露another_stooge.nickname     //'Curly',stooge的。复制代码

1.9 减少全局变量污染

全局变量削减了程序的灵活性,应避免使用。 最小化使用全局变量:只创建唯一的全局变量。

var MYAPP = {};复制代码

把全局性的资源都纳入一个名称空间之下,不同组件间冲突的可能性会明显降低。

转载于:https://juejin.im/post/5b2ba7b1e51d45588b1dab25

你可能感兴趣的文章
使用Entity Framework Core访问数据库(DB2篇)
查看>>
【BZOJ4310】跳蚤
查看>>
Python基础--字符串、列表、元组、字典
查看>>
Ubuntu 16.04 安装opencv的各种方法(含opencv contrib扩展包安装方法)
查看>>
HDU-1029_Ignatius and the Princess IV
查看>>
团队开发冲刺第二阶段11
查看>>
自动释放池和运行/消息循环
查看>>
前端之JQuery
查看>>
EL表达式处理字符串 是否 包含 某字符串 截取 拆分...............
查看>>
jiffies溢出与时间先后比较-time_after,time_before【转】
查看>>
linux内存分配方法总结【转】
查看>>
内存泄露内存溢出
查看>>
汉字转化成拼音(首字母)
查看>>
vue router-link 默认a标签去除下划线
查看>>
关于css选择器的一些事 第一章 基本选择器!
查看>>
curl命令使用(转)
查看>>
项目总结14:Windows远程连接redis(cmd指令或PowerShell指令)
查看>>
加载器
查看>>
curl数据采集系列之正则处理函数get_matches
查看>>
JavaScript对象探讨
查看>>