美文网首页
Javascript学习笔记——6.2 属性的访问和赋值

Javascript学习笔记——6.2 属性的访问和赋值

作者: IFELSE | 来源:发表于2018-04-19 10:09 被阅读0次

可以通过.[]运算符来获取属性的值,两者完全等价。

对于.来说,右侧必须是属性名称的简单标识符。
对于[]来说,右侧可以是表达式,但表达式结果必须是字符串或者可以自动转换为字符串的值。

var author = Book.author
var year = Book['year']

也可以通过.[]给属性赋值

Book.author = {name:'Mike', age:'38'}
Book['year'] = 2011

关联数组

可以看出[]的访问方式与数组类似,区别就是数组是使用数字作为索引,对象使用字符串作为索引。

使用字符串作为索引的数组成为关联数组,也成为散列映射字典Javascript对象都是关联数组。

[]在动态建立属性时比.更具有灵活性,如下功能使用.就无法实现:

//将客户的多个地址合并
var addr = ''
for(i=0;i<4;i++){
  addr += customer['address'+i]+'\n'
}

例如,股票系统中,因为实现无法直到客户买什么股票,可以通过动态添加属性的方式来实现该功能

//用holding对象保存持仓股票
function buyStock(holding,stockname,shares){
  holding[stockname] = shares
}

练习:如何计算股票总价值? 使用for/in

继承

Javascript对象的属性分为自有属性和继承属性(从原型对象继承)。

属性读取:
Javascript对象查找属性按照以下原则进行:假设查询o的属性x,如果o没有x属性,就在o的原型对象中查找x属性;如果o的原型对象也没有x属性,就继续查找原型对象的原型的属性,直到找到x或者原型为null位置。可以看出这个过程是一个链式查找的过程,这个链成为原型链

属性赋值:
属性赋值操作,总是在原始对象上创建或修改属性,不会去修改原型链。
如果对象o已经包含属性x,则直接修改属性x的值;如果o没有属性x,则给o添加x属性并赋值。如果o的原型对象有属性x,赋值会覆盖该属性,但不会改变原型对象x的值。即o和原型对象各自有x属性,值互不干扰,o.x和o.proto.x可以不同。

Javascript中,只有在查询属性时才有继承存在,设置属性和继承无关。

var o={}
o.x = 1
var p = Object.create(o)
p.y = 2
var q = Object.create(p)
q.z = 3
console.log(q.x+q.y+q.z) //6
p.a = 9
console.log(q.a) //9

属性访问错误

访问对象不存在的属性并不会报错,会得到undefined。但如果对象不存在,就会报错,可用if(o)这种形式避免错误。

var len
if(book&&book.title&&book.title.length){ //利用了&&的短路运算
  len = book.title.length
}

以下情况属性赋值会失败:

  • 属性是只读的,不管是自有属性还是继承属性。
  • 对象的可扩展性是false,而且原型链中也没有该属性。

相关文章

  • Javascript学习笔记——6.2 属性的访问和赋值

    可以通过.或[]运算符来获取属性的值,两者完全等价。 对于.来说,右侧必须是属性名称的简单标识符。对于[]来说,右...

  • javascript的对象属性

    javascript的对象属性分为两类: 数据属性和访问器属性 数据属性: value:属性的值 writable...

  • JavaScript对象

    JavaScript对象由属性和方法构成 访问对象的属性: 常规属性:直接 obj.name 或者 obj['...

  • js数组

    length属性 可以通过访问length属性,得到数组的长度;也可以通过访问length属性,为其赋值,来决定数...

  • JavaScript 数据属性和访问器属性

    以下两篇文章仅供参考学习参考文章https://www.cnblogs.com/neusc/p/5794650.h...

  • JavaScript访问对象的属性和方法

    对象的属性和方法统称为对象的成员。 访问对象的属性 在JavaScript中,可以使用“ . ”和“ [ ] ”来...

  • 《浏览器工作原理与实践》学习笔记(二)

    本文是极客时间上《浏览器工作原理与实践》课程的学习笔记。 变量提升 在 JavaScript 中变量的声明和赋值是...

  • ES6 — 解构

    【MDN】解构赋值语法是一种 Javascript 表达式。通过解构赋值, 可以将属性/值从对象/数组中取出,赋值...

  • JavaScript学习笔记一

    个人学习笔记 参考阮一峰的JavaScript教学 2.1-2.2章 变量 1变量的声明和赋值,是分开的两个步骤,...

  • 面试

    KVC KVC可以通过key直接访问对象的属性,或者给对象的属性赋值(包括私有属性),这样可以在运行时动态的访问或...

网友评论

      本文标题:Javascript学习笔记——6.2 属性的访问和赋值

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