JavaScript对象基本用法

0. 前言

对象是JavaScript(以下简称JS)的“三座大山”之一,对于理解JS是关键一步。不过对于我这种前Python程序员来说,这一块内容虽有点绕,但不难。

不过鉴于不能将Java或Python中的面向对象思想完全移植到JS中,所以还是开篇博客来写一个学习笔记。

1. JavaScript与传统的面向对象语言需要区分的部分

以下部分纯个人经验之谈:

  • Python是一门灵活的语言,既可以写成函数式编程的方法,也可以写成面向对象的套路
  • JavaScript是完全的万物皆对象语言,除了基本数据类型外的类型皆为对象(Object)类型,所以我愿称之为“全对象语言”。

2. 对象及定义方法

JS的对象和Python中的字典(dict)有些类似,都是键值对(key-value)的集合,它的特点是无序

在JS中定义对象有两种方法,并且完全等价:

// 简写
let obj = {
    'name' : 'Allen',
    'age' : '22'
};

// formal
let obj2 = new Object({
    'name' : 'Allen',
    'age' : '22'
})
复制代码

一般能看到的是第一种,但第二种更为正式一些。不过还是推荐第一种写法。

有几点需要注意:

  • 键名(key)必须是字符串。
  • 不过,在定义键名时可以省略字符串,但不推荐这样做
  • 如采用上面一条的方法定义字符串,那么键名按照标识符的方法来写(即怎么定义变量就怎么定义key)

3. CRUD(即增删改查)

任何事情最后都逃不过CRUD(增删改查的英文是CRUD,即”创建(Create)、 读取(Read)、 更新(Update)和删除(Delete)),JS中的对象也name是这样。

3.1 查

查看对象属性是后面一切操作的基础,所以先说这个。

两种方法:

obj.name // Python式查看方法
obj['name'] // JS式查看方法,推荐使用
复制代码

注意,obj[name]也可以,但其中的name指向一个变量name而非字符串'name'。示例:

let n = 'name';

obj[n] //注意上面的n
复制代码

3.2 删

delete语句即可。示例:

delete obj.name

// or
delete obj['name']
复制代码

3.3 增与改

直接写就行,下面语法的功能除了增就是改,没别哒~示例:

obj.name = 'Fiona'

// or 

obj['name'] = 'Fiona'
复制代码

如原对象obj中无name,则添加;如有,则改写。

不过,如果批量添加的话,Object.assign倒是个不错的选择。语法如下(例子来源于MDN):

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };

const returnedTarget = Object.assign(target, source);
复制代码

上面代码的意思是,将sourcetarget合并。

4. ‘name’ in obj和obj.hasOwnProperty(‘name’) 的区别

其实从语义上就能看出,前者用于判断对象obj中是否有某项属性;后者用于判断name是否为非原型的属性,即可以理解为判断name是不是从Object继承来的属性。

const obj = {};

obj.hasOwnProperty('toString')
// output: false

'toString' in obj
// output: true
复制代码

解释:

  1. 因为toStringObject的公共属性,也就是objObject父类继承下来的,不是它自己的,所以obj.hasOwnProperty('toString')会输出false
  2. 而对于'toString' in obj语法来说,只有toString是有效属性/方法,不管它是自己的还是继承自父类的,都是true

上图:

上述代码放到控制台后的运行效果

References

  1. [1] MDN文档–assign
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享