6种基本数据类型
null undefined string number boolean symobl
5种falsy值
null undefined 0 NaN ‘’(空字符串不能有空格)
对象
是js的第七种数据类型,也是唯一的一种复杂类型。
注意
- js对象的键名都是字符串(es6之后还可以是symbol)
- 引号可以省略,省略后只能写标识符(是指只能包括字母、数字、下划线、美元符号,且不能是数字开头)
- 引号就算省略了,也还是字符串
Object.keys(obj)}
这个API可以正确查看对象的key
变量作为属性名–用[]
- 用
xxx in object
返回布尔值查看是否含有xxx属性 obj.xxx === undefined
不是确定xxx是否是obj的属性
chrome中调试对象
- 查看自身属性+共有属性(原型)
console.dir(obj)
对象写属性
- 直接赋值
obj.name = 'xx'
这里name是字符串,可以改为obj['name'] = 'xx'
- 批量赋值
Object.assign(obj,{age: 18,gender: 'man'})
修改共有属性
生产环境中不能使用
obj.__proto__.toString='xxx'
准确的使用是在构造函数上修改
Object.prototype.toString = 'xxx'
修改隐藏属性(原型,这个在创建时修改)用
Object.create()
let common = {kind: 'human'} let obj = Object.create(common) obj.name = 'lei' let obj2 = Object.create(common) obj2.name = 'wang'
总结: 要改就一开始改,别后来再改
内容总结
- 原型里包含共有属性
声明对象的两种写法
字面量
let obj = {name: 'liu', age: 18}
new 构造函数
let obj = new Object({name: 'liu', age: 18})
删除对象的属性
使用 delete
操作符 delete obj.name
或delete obj['name']
查看对象的属性
查看自身所有属性
Object.keys(obj)
查看自身 + 共有属性
console.dir(obj)
查看属性是自身的还是共有的
obj.hasOwnProperty('toString')
修改或增加对象的属性
直接赋值
obj.name = 'xx'
这里name是字符串,可以改为
obj['name'] = 'xx'
批量赋值
Object.assign(obj, {name: 'z', age: 18})
修改共有属性
- 生产环境中不能使用
obj.__proto__.toString='xxx'
- 准确的使用是在构造函数上修改
Object.prototype.toString = 'xxx'
- 生产环境中不能使用
修改隐藏属性用
Object.create()
let common = {kind: 'human'} let obj = Object.create(common) obj.name = 'lei' let obj2 = Object.create(common) obj2.name = 'wang'
总结: 要改就一开始改,别后来再改
‘name’ in obj 和 obj.hasOwnProperty(‘name’)区别
都是用来判断属性是否属于对象。
第一个有点问题是它判断的属性如果是对象继承的可枚举属性则也会返回true
, 而 hasOwnProperty
则只会返回自身的,不包含属于原型的属性。