变量声明
三种声明方式:
var a = 1过时的,不好用let a = 1新的一般用于变量声明const a = 1用于常量声明,声明时必须赋值,且不能更改
let
- 遵循块作用域,适用范围不能超出{}
- 不能重复声明
- 是否赋值随意
- 必须先声明在使用
- 全局声明的
let属性不会变成window的属性 for循环配合let有奇效
七种数据类型
JS一共有七种数据类型,六种简单类型,一种复杂类型
六种简单类型
- 数字 number(以64位浮点数存储)一些特殊值
- 0 ,+0 ,-0
- 无穷大 :infinity ,+infinity ,-infinity
- NaN
- 字符串 string
- '单引号'
- "双引号"
- 、`反引号` 可以加回车
- 布尔 bool
- true和false
- 五个falsy值:undefined、null、0、NaN、''(空)
- 符号 symbol
- 空 undefined
- 空 null
一种复杂数据类型——对象object
定义
- 无序的数据集合
- 键值对的集合
- 数组、函数、日期、正则都属于对象
写法举例
let obj = { 'name':'hu','age':18}let obj = new Object ({'name':'frank'})console.log({'name':'hu','age':'18'})
细节
- 键名是字符串不是标识符,可以包含任意字符
- 引号可以省略,但省略后只能用标识符
- 就算省略了引号,键名也还是字符串
属性
- 属性名:每个key都是对象的属性名(property)
- 属性值:每个value都是对象的属性值
Object.keys(obj)可以得到obj的所有keyObject.values(obj)可以得到obj的所有valueObject.entries(obj)可以得到obj的所有key和value

- 变量作属性名
let p1 = 'name'
let obj = {p1:'hu'} //属性名为 'p1'
let p1 = 'name'
let obj = {[p1]:'hu'} //属性名为 'name'
-
- 不加[]的属性名会自动变成字符串
- 加了[]则会被当做变量求值
- 值如果不是字符串,则会自动变成字符串

- 隐藏属性
- JS中每一个对象都有一个隐藏属性
- 这个隐藏属性储存着其共有属性组成的对象的地址
- 这个共有属性叫做原型

增删改查
对对象的属性进行增删改查
删
delete obj.xxx或delete obj['xxx']即可删除obj的xxx属性

- 注意:
obj.xxx === undefined不能断定xxx是否为obj的属性 obj含有name属性,但是值为undefined;obj2就直接没有name这个属性名
- 可以通过
in来查看是否有属性名

查
- 查看自身所有属性
Object.keys(obj)
- 查看自身+共有属性
console.dir(obj)- 或者依次用
Object.keys打印出obj.__proto__
- 判断一个属性是自身的还是共有的
obj.hasOwnProperty('toString')

- **
in和hasOwnProperty**的区别in可以查看是否含有某属性,但是不可以区分是自身属性还是共有属性hasOwnProperty可以判断一个属性是自身的还是共有的

改和增
-
直接赋值
let obj = {name:'hu'}//name是字符串obj.name = 'hu'//name是字符串obj['name'] = 'hu'//name是字符串obj[name] = 'hu'//错,name是变量obj['na'+'me'] = 'hu'//let key = 'name'; obj[key] = 'hu'//let key = 'name'; obj.key = 'hu'//错obj.key等价于obj['key'],而obj[key]是变量
-
批量赋值
Object.assign(obj,{age:18,gender:'man'})
-
修改或增加共有属性
- 无法通过自身修改或增加共有属性
-
let obj ={},obj2={} //obj和obj2共有toString obj.toString = 'xxx' //只会改obj自身属性 obj2.toString还在原型上

- 原型隐藏属性也可以改,但是不推荐改,所以这里就不写了
原型
- 每个对象都有原型
- 原型里存着对象的共有属性
- 比如:
obj的原型就是一个对象,obj.__proto__存着这个对象的地址 - 这个对象里有
toString/constructor/valueOf等属性
- 比如:
- 对象的原型也是对象
- 所以对象的原型也是对象
obj = {}的原型即为所有对象的原型- 这个对象包含所有对象的共有属性,是对象的根
- 这个原型也有原型,是
null