第八章 对象(万物皆可对象) --- 凭什么我单身?

314 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动

前言

感恩所弃之物,则物缘可尽,心可安。 ----近藤麻理惠

对象含义+操作

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排序,下一节我们要进行对象继承的讲解,觉得可以的话,关注我吧!