对象(object)
对象的作用
- 一个变量存储多个数据
对象与数组的区别
- L数组具有顺序性,但没有描述性,二对象相比数组描述性更强。
对象的语法
let 对象名 = {属性名:属性值,属性名:属性值}
let obj = {
name: '犬夜叉',
equipment: '铁碎牙',
skill: '爆流破',
girlfriend: '戈薇'
};
console.log(obj['name']);
// 对象的下标是字符串,所以必须要有引号
//对象还有另外一种访问方式:.语法 对象.属性名 (属性名不需要加引号)
console.log(obj.name)
对象的增删改查
定义一个对象
let obj = {}
增加数据:数组法和点语法
obj['name'] = '詹姆斯'; //增加一个name属性
obj.age = '36'; //点语法,属性名不用加引号
查找数据
console.log(obj['name']) //取出name的值
console.log(obj.age) //取出age的值
改数据(已经有数据的情况下)
obj['name'] = '韦德'; //修改name属性的值
obj.age = '39'; //修改age的值
删除数据
delete obj['name'] //删除name属性
delete obj.age //修改age属性
- 注意:属性名也可以为数字,但是在访问对象时不能使用点语法,只能使用数组法:console.log(obj [0] )
对象遍历
- 数组的遍历思路:一个一个取出数组元素的下标
- 对象遍历:对象没有length属性,普通for循环无法实现
- 对象遍历:挨个取出下标,存入到某个变量中:对象通过变量下标来访问具体的属性值
//定义对象
let obj = {
name: '矮人狙击手',
skill: '瞄准',
special: '腿短没位移',
need: '辅助跟随'
}
for(let i in obj){
console.log(obj.i);// 找属性名叫i的属性
console.log(obj['i']); // 带了引号:i就是个字符串 === obj.i
console.log(k, obj[k]);
对象的访问
- 无论何时何地,只要访问属性,就必须前面有对象
- 属性的访问必须由对象调用
let obj = {
heroName: '鲁班七号',
heroSkill: '飞碟',
sf: function () {
document.write(`${obj.heroName} 释放 ${obj.heroSkill} 技能`);
document.write(`${this.heroName} 释放 ${this.heroSkill} 技能`);
// JS提供了一个东西:只要有function定义函数,里面就会产生一个变量:this,代表当前调用当前函数的对象
obj.sf( ); // obj调用sf方法:里面的this代表obj这个对象
}
}
函数
- 函数:如果有形参,调用的时候要传入实参,否则形参不会被赋值:值就是undefined
function test(a, b) {
console.log(a, b);
}
test(); // 输出两个undefined
arguments关键字
- arguments关键字是系统自动生成的,用来获取所有的参数
- arguments长的像数组,但是又不是数组:伪数组
- 伪数组:可以当做数组用(用下标访问),使用for循环遍历
用arguments求最大值
// 不限参数的max函数
let m = -Infinity; // 空擂主思想
for (let i = 0; i < arguments.length; i++) {
if (arguments[i] > m) {
m = arguments[i];
}
}
return m;
}
console.log(max(1, 2));
console.log(max(1, 2, 3, 4));
// Math.max()
console.log(Math.max(1, 2, 3, 4, 5));
// arguments的应用
// 不确定实参的数量的时候,就用arguments
arguments的应用场景
- 不确定实参的数量的时候,就用arguments
自调用函数
- 将函数写在另外一个函数的调用位置
- 存在价值:将数据定义在自调用函数内部:外部无法修改(即使重名也不影响):保证数据的安全(沙箱:为了保证代码和数据安全)
- 特点:函数里面的代码会自动执行,执行1次(再也无法执行)(执行完就回销毁内存:不占用内存)
(function aa(){ //自调用函数即使有名:也没有意义,外部不能调用
let res = 1;
console.log(les)
})()
回调函数
- 回调函数:有名函数
- 函数表达式回调
- 匿名回调(最常使用)
有名回调(函数表达式回调)和匿名回调的区别
- 有名回调:可以多次用,代码会一直在内存存在(优点:多次调用,缺点:代码长期占用内存)
- 匿名回调:只能用1次,如果要再用,代码复制一份(优点:用后即焚,缺点:只能调用1次)