小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
前言
感恩所弃之物,则物缘可尽,心可安。 ----近藤麻理惠
对象含义+操作
JavaScript为"对象"一次赋予了新的含义。在JavaScript中,除了两种底形之外(null 和 undefined),万物皆对象(所以我为什么单身?????)
对象组成
对象即一系列属性(或成员)的容器,各属性都由键名和键值组成,其中键名为字符串(还支持Symbol哦!),键值可以为任意类型。在其他语言中,这类数据结构通常被称为哈希表(has table)、映射表(map)、记录(record)、结构体(struct)、关联数组(associative array) 或 字典(dictionary),还有些语言干脆直接用dict来代替它。
对象创建
我们可以通过对象字面量来新建对象。对象字面量跨域被存储于变量、对象或数组中,也可以被传入函数,还可以被函数作为返回值。
- 对象直面了由 "{ }"包裹,内部可以有零个、一个或多个属性,由逗号(,)分隔。属性可以表示为一下形式。
- 一个字符串、一个冒号(:)和一个表达式。属性键名是一开始的字符串,而属性键值就是表达式的结果。
- 一个名字、一个冒号和一个表达式。属性键名就是一开始的名字转换成字符串的结果,而数属性键值就是表达式的结果。
- 一个名字。属性键名是该名字转换成字符串的结果,而属性键值就是一个同名变量或者参数对应的值。
- 一个名字、由 () 一个 {} 包裹的函数体。 举例如下
let bar = "a long text"
let my_litter_object = {
"0/0":0,
foo: bar,
bar,
my_litter_method() {
return 'I have' + bar
}
}
对象访问
我们可以通过带命名的点表示法来访问对象的某个属性
my_litter_object.foo = my_litter_object.bar
可以通过方括号表示法来访问属性
my_litter_object['0/0'] === 0 // true
如果访问不存在的属性,那么会返回 undefined 这个底型。
my_litter_object.a // undefined
可以通过赋值语句为对象新增或者修改属性。
my_litter_object.age = 39;
我建议不要再对象中存储 undefined。尽管JavaScript中允许存储undefined,但是不存在整个属性的时候也是返回这个值,这样会产生二义性。
删除属性
delete my_litter_object["0/0"]
typeof 操作
typeof my_litter_object === "object"
区分大小写
对象属性值是区分大小写的,也就是说 my_litter_object.a和my_litter_object.A是不一样的属性,在匹配键名的时候JavaScript是用===运算符对两个字符串进行匹配的。
复制
Object.assign 函数可以将一个对象中的属性赋值到另一个对象中。
let my_copy = Object.assign({},my_litter_object);
my_copy.bar // a long text
my_copy.age // 39
my_copy.age += 1
my_copy.age // 40
delete my_copy.age;
my_copy.age // undefined
一个对象可以被很多对象赋值。所以我们可以用这个方法来将多个简单对象组装成一个复杂对象。
键名排序
Object.keys(object)函数会将传入对象的所有自由属性(不包括继承属性)的键名作为字符串放入一个数组中并返回。这样一来,你就可以用数组的各种方法区处理对象的属性了。
键名是属性的插入时间来排序的。我们可以通过数组的sort进行排序修改。
例子:
let obj = { '2':2 , '1': '1'};
Object.keys(obj).sort();
obj // {1: "1", 2: 2}
总结
通过本文我们学习了对象的含义、对象的一些创建方法、对象复制、对象键名sort排序,下一节我们要进行对象继承的讲解,觉得可以的话,关注我吧!