JS的“七个孩子”
- number (数字)
- string (字符串)
- bool (布尔)
- symbol (标点符号)
- object (对象)
- undefined(空)
- null(空)
以上为JS的数据类型。(一定要记牢)其中仅仅只有对象object是复杂类型。你的脑子里是不是有很多问号? SO 今天我们就来好好认识一下对象吧!
1.对象的定义
无序的数据集合,键值对的集合
如何写呢?
let obj = {'name':'hejiajin','age':25}
let obj = new Object({'name':'hejiajin'})
console.log({'name' :'hejiajin','age' :18})
其中:
-
键名是字符串,不是标识符,它可以包含任意字符
-
这里的引号可以省略,但省略以后仅仅只能写标识符
-
省略引号,但是一定要注意键名一定还是字符串(重要)
预览效果
2.属性名和属性值
key 代表属性名,value代表属性值
看个栗子:
let obj =
{
1:'h',
3.2:'e',
1e2:'true',
1e-2:'true',
.234:'true',
0xFF:'true'
};
Object.keys(obj)
//可以得到obj 的所有key
这里的属性名会自动转换为字符串。
预览
那如何用变量来作属性名呢?
let p1 = 'hejiajin'
let obj = {p1:'hejiajin'}//属性名为p1
let obj = {[p1] :'hejiajin'}//属性名为 'name'
区别:
- 不加[]的属性名会自动变换为字符串
- 加了[]的属性名会当做变量求值
- 值若不是字符串,会自动转换成字符串
预览
3.对象的隐藏属性
JS 中每个对象都有隐藏属性,它储存着其共有属性组成的对象的地址,而共有属性组成的对象叫做原型也就是说:隐藏属性存着原型的地址。
代码栗子:
var obj = {}
obj.toString() // 居然不报错
隐藏obj 的隐藏属性对应的对象上有toString()
4.增删改查
4.1 删除属性
delete obj.xxx // 删除obj的属性
delete obj['xxx']// 删除obj的属性
'xxx'in obj === false //不含属性名
'xxx'in obj && obj.xxx === undefined //含有属性名,但是值为undefiend
obj.xxx === undefiend //不能判断 'xxx'为 obj的属性名
预览:
4.2 查看属性(读属性)
代码形式:
Object.keys(obj) //查看所有的属性
console.dir(obj) //查看自身属性和共有属性
obj.hasOwnProperty('toString') //查看 'toString'属性是不是自身的还是共有的属性
补充:
1.原型的知识:
- 每个对象都有原型
- 原型存着对象的共有属性
- 对象的原型也是对象(所有的原型也有原型这一点不矛盾)
- obj = {} 的原型是所有对象的原型,包含所有对象的共有属性即为对象的根
- 所有对象的原型也有原型是null
2.查看属性的方式 优先使用中括号语法
obj['key'] //中括号语法
obj.key // 点语法
obj.name = obj['name'] != obj[name] //这里的name是字符串不是变量
let name = 'hejiajin' // 定义一个变量
obj[name] = obj['hejiajin'] != obj['name'] != obj.name
4.3 修改和增加属性(写属性)
- 直接赋值
- 批量赋值
代码:
let obj = {name : 'hejiajn'} //name是字符串
obj.name = 'hejiajn'
obj['name'] = 'hejiajin'
Object.assign(obj, {age: 18, gender: 'man'})//批量赋值
如何修改共有属性呢?
- 无法通过自身去修改或者增加共有属性
let obj = {},obj2={}
obj.toString = 'you are beautiful!'
// obj2.toString还是在原型上,共有属性修改失败
- 修改共有属性(隐藏属性)的方法
第一种是使用 _ _ proto_ _
let obj = {name = 'hejiajin'}
let obj2 = {name = 'caokun'}
let common = {kind:'human'}
obj.__proto__ = common
obj2.__proto__ = common
第二种方式 使用 Object.creat
let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'
注意: 改属性要趁早!
总结
- 删
- 查
- 改
- 增
补充:强烈推荐看一下 let(转载)的语法,让你真正明白 let