七种数据类型
number string bool symbol
null undefined
object
五个falsy值
null undefined 0 NaN ""
对象
定义
无序的数据结构
键值对的集合
(键名是字符串,不是标识符,可以包含任意字符。引号可以省略,省略之后就只能写标识符。就算引号省略了,键名还是字符串)
声明对象两种写法
let obj={'name':'kacey','age':'18'}
let obj=new Object({'name':'kacey'})
属性名
每个key都是对象的属性名。(所有属性名都会自动变为字符串)
Object.keys(obj)可以得到obj的所有key
变量做属性名:
let p1='name' let obj={p1:'kacey'}这样写属性名为'p1'
let obj={[p1]:'kacey'}这样写属性名为'name'
不加[ ]的属性名会自动变为字符串,加了[ ]会当作变量求值,值如果不是字符串就会自动变为字符串。
属性值
每个value都是对象的属性值。
删除属性
delete obj.xxx
delete obj['xxx']
'xxx'in obj查看xxx是否还在对象内
读属性
Object.key(obj)查看自身属性
console.dir(obj)查看自身和共有属性
obj.hasOwnproperty(toString)判断一个属性是自身的还是共有的
obj['name']查看属性 这里的name是字符串
obj.name查看属性 这里的name是字符串
obj[name] 这里的name是变量
谨记key是字符串,不要变成obj[key]
写属性
let obj={name:'kacey'}
obj.name='kacey'
obj['name']='kacey'
obj['na'+'me']='kacey'
let key='name';obj[key]='kacey'
let key='name';obj.key='kacey' 这个声明是错的,因为这里的obj.key等价于obj['key']
Object.assign(obj,{age:12,gender:',man'})批量赋值
修改隐藏属性推荐使用Object.create
'name' in obj和obj.hasOwnProperty('name') 的区别: 前者自身属性和共有属性都返回true,后者仅仅是自身属性才返回true。hasOwnProperty 只检查是否为自身属性,配合操作符 in 检查是否为共有属性。