变量声明
- Var声名
声明一个变量,可同时将其初始化为一个值。
varnameN
变量名。变量名可以定义为任何合法标识符。
valueN
变量的初始化值。该值可以是任何合法的表达式。默认值为 undefined。
- Let声明
语句声明一个块级作用域的本地变量,并且可选的将其初始化为一个值。
var1, var2, …, varN
变量名。必须是合法的标识符。
value1, value2, …, valueN
变量的初始值。可以是任意合法的表达式。
- Const声明
声明一个只读的命名常量。 常量是块级作用域,很像使用let语句定义的变量。常量的值不能通过重新赋值来改变,并且不能重新声明。
nameN
常量名称,可以是任意合法的标识符。
valueN
常量值,可以是任意合法的表达式。
Javascript中的基本数据类型
- 数字Number
- 字符串String
- 布尔Bool
- 符号Symbool
- Undefined
- Null
- Object
数据类型的前六种都比较好理解,而Object属于复杂类型,所以这里我们重点讨论Object对象
Javascript对象
定义:
- 无序的数据集合;
- 键值对的集合
写法:
1. let obj = {'name' = 'frank', 'age' = '18'}
2. let obj = new Object({'name':'frank'})
console.log({'name':'frank','age':'18'})
提示:
- 键名是字符串,不是标识符,可以包括任意字符;
- 引号可以省略,但省略之后也还是字符串,键名也还是字符串不是表示符; 内容2:如何删除对象的属性
变量做属性名:
let a = 'xxx'
var obj = {[a]:'xxx'}
这里就需要注意几点:
- 不加'[]'的属性名会自动变成字符串;
- 加了'[]'则会变成变量求值;
- 如果值不是字符串,就会变成字符串;
原型Prototype
由于原型比较复杂,这里不一一赘述,只需要了解以下几点就行:
- 所有函数一出生就有一个 prototype 属性
- 每个对象都有原型,除了根对象 Object.prototype 比较特殊,原型为 null
- Object.prototype 是所有对象的原型(除了它自己),但 Object.prototype 有可能不是第一层原型,而是第二层原型,比如 arr 的第一层原型是 Array.prototype,第二层原型才是 Object.prototye
增删改查
如何删除对象的属性
方法:
-
delet obj.xxx // 或者也可以 delete obj][xxx] -
obj.xxx = undefined
注意:
- 方法一是彻底删除的属性名与属性值;
- 方法二只是说删除的属性值,让这个属性名对应的属性值为undefined;
如何查看对的属性
-
Object.keys() // 查看属性名 -
Object.values() // 查看属性值 -
console.dir() -
obj.__proto__ // 查看隐藏属性 -
'xxx' in obj // 看bool值判断是否存在 -
obj。hasOwnproperty('xxxx') // 看bool值判断是否存在
- 'name' in obj和obj.hasOwnProperty('name') 的区别
'name' in obj是指name这个属性是否在obj上,只要可以找到,bool值就是true,并不在乎是否在自身找到还是在原型中找到; obj.hasOwnProperty('name')是指这个属性是不是在自己身上,如果自身没,有bool值就是flase,也不是去原型中找。
如何修改或增加对象的属性
增加对象的属性
- 直接赋值
let obj = ('name' = 'wang' )
- 批量赋值
Object.assign(obj,{p1:1,p2:2,p3:3,.......})
修改对象的属性
修改对象的属性与增加对象属性差不多,
obj.name = 'xxx'
这里讲一下修改隐藏属性
- 可以通过__proto__
let obj = {name:'frank'}
let obj2 = {name: 'jack'}
let common = {kind: 'human'}
obj.__proto__ = common
obj2.__proto__ = common
- 通过Object.create
let obj = Object.create(common)
obj.name = 'frank'
let obj2 = Object.create(common)
obj2.name = 'jack'