七种数据类型
数字(number),字符串(string),布尔(bool),符号(symbol),空(null),未定义(undefined),对象(object)
五种Falsy值
1:null,2:undefined ,3:0 ,4:'' (空字符串),5: NaN
声明对象的两种语法
let obj{'name':'huo','age':18}
let obj = new Object({'name':'huo'})
其中'name'和'age'是键名,键名是字符串不是标识符,也可以包含任意字符。引号可以省略,引号省略后只能写成标识符或者数字。注意:就算键名的引号被省略,键名依然是字符串
转义
1,\'表示'
2, \"表示"
3, \n表示换行
4, \r表示回车
5, \t表示tab制表符
6, \\表示\
7, \uFFFF表示对应的Unicode字符
8, \xFF表示前256个Unicode字符
如何删除对象的属性
1,直接将yyy属性删掉
delete obj.yyy
//或者
delete obj['yyy']
2,键名为undefined
obj.xxx=undefined
'xxx' in obj===false //说明不含属性名
'xxx' in obj && obj.xx===undefined //含有属性名,但值为undefined
obj.xx===undefined 不能判断'xxx'是否为obj的属性
如何查看对象的属性
- 查看属性的key
Object.keys(obj)
- 查看属性的value
Object.values (obj)
- 查看自身+共有属性
console.dir(obj)
- 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')
- 'name' in obj和obj.hasOwnProperty('xxx')的区别是
'name' in obj //可以访问到共有属性
obj.hasOwnProperty('xxx') //只能查看自己的属性
如何修改或增加对象的属性
- 直接赋值
let obj={'name':'huo'} // name是字符串
obj.name='huo' // name是字符串
obj['name']='huo'
let key = 'name'; obj[key]='huo'
- 批量赋值
- Object.assign(obj,{
age:18
gender:'man'
})
- 无法通过自身修改或增加共有属性
let obj={},obj2={} //共有 tostring
obj.toString='xxx' //只改obj的自身属性,obj2.toString还在原型上
- 一定修改或增加原型上的属性
(1) obj.__proto__.toString='xxx' //不推荐使用__proto__
(2) Object.prototype.toString='xxx'