31、认识对象
①什么是对象
Js中的一种数据格式 对象在JS中的数据类型数据为:引用数据类型(也有喜欢叫复杂数类型)
②如何向变量中存储一个叫做对象的数据呢?
语法1:var obj = {键值对}
键值对 -> key:value
如果对象内部有多个键值对,那么需要使用逗号隔开
```js
var obj = { a:100, b:200, c:300, q:999}
console.log(obj)
```
③什么是键值对(拿对象obj 为例子)
在这个对象中,a 为key,100为对应value
另外一种叫法:a为键,100为对应的值
另外一种叫法:a为属性名,100为对应的属性值
b为key,200为对应的value
b为键,200为对应的值
b为属性名,200为对应的属性值
32、建对象
创建对象 分为两种方式:
*1.字面量的形式(使用频率比较高)
语法:var obj = {键值对}
*2.内置构造函数的创建
语法1:var obj1 = new Object()
语法2:var obj1 = new Object({a: 1, b: 2})
注意: new Object 的О是大写的,不是小写
*面试官:JS创建对象的方式有哪些?
目前暂时是 两种
1.字面量的方式
```js
var obj = {
a:1,
b:2,
c:0,
d:'abc',
e:true,
q:undefined,
w:null,
r:function () {console.log('我是 obj对象内r这个属性的属性值,我是一个函数')}
}
console.log(obj)
```
2.内置构造函数的方式
```js
var obj1 = new Object({ a: 1, q: 777, w: 666, e:'qwer'})
console.log(obj1)
```
33、象的操作(增删改查)
换句话说,就是对内部的属性的操作
分为两种方式
1.点语法
2.中括号语法(数组语法)
*一般来说,大部分场景使用点语法更简单,有一些特殊场景只能使用中括号语法
一般大部分情况下,点语法与中括号语法,作用相同,怎么选择都可以
特殊情况下我们需要使用中括号语法
1,对象的属性名,有纯数字或者特殊符号,这个时候,就只能使用中括号语法
2.如果涉及变量相关的时候,也需要使用中括号
```js
var obj = {
100: '我的属性名 是纯数字100',
'!': '我的属性名是特殊符号 !',
'@': '我的属性名是特殊符号 @'
}
console.log(obj.100)
console.log(obj[100])
console.log(obj['!'])
console.log(obj['@'])
var obj = {a: 1, b: 2, name: 'QF001'}
var myName = 'name'
console.log(obj.myName)
原因:obj.myName
我们猜想他这个myName是一个变量,所以实际的应该是 obj.'name',
所以应该打印 obj 的name属性,但实际的输出结果是undefined
因为对象的点语法,会将点后边的字符当成一个字符串去使用,而不会当成变量
拿obj.myName举例
他会将 myName 当成一个字符串去对象中查找,有没有一个叫做myName 的属性名
找完之后发现对象中没有这个属性名,所以打印的值为undefined
console.log(obj[myName])
原因:中括号语法,内部书写的字符,如果不加引号,会把它当成变量去使用,所以找到实际的值之后。myName这个变量对应的值为name
所以obj[myName]相当于写了obj['name']
所以会去对象obj中找一个叫做name的属性名,找到之后打印在页面
```
34、for...in遍历对象
for...in 一个循环语句
对象:一种数据格式
遍历:一般我们会说'遍历对象'/'遍历数组'
'遍历对象'想办法拿到对象内部所有的属性名与属性值
for (var i in 要遍历的对象) { 循环要执行的代码}
*对象关于key的要求 或者说对于属性名的要求 或者说对于键值对的键的要求
1.推荐使用符合变量命名规则与规范的名字
2.对象的 key 也可以使用 纯数字 来当作键名(属性名/key)
3.可以使用任何特殊符号(但是需要使用引号包裹)
!注意:一般只推荐使用第一种,二三了解即可
var obj = {a: 1, q: 'qwe', t: true, u: undefined}
for (var i in obj) {
console.log(obj[i])
}