对象
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、 函数等。
对象的应用场景:描述复杂的事务
对象是由属性和方法组成的。
- 属性:事物的特征,在对象中用属性来表示(常用名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
创建对象的三种方式
在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object):
对象:一组数据的集合,属性和方法的集合,对这个对象进行描述。 对象的创建: var 对象名 = { 属性:属性值, 方法:函数 } 对象的访问: 对象名.属性 对象名.方法() 对象名[‘属性’] 对象名[‘方法’]() 创建空对象再去赋值: var obj = { } var obj = new Object() obj.name = 'zs' obj.sex = '男' obj.sayhi = function () { alert('sayhi') } 创建有内容的对象:两种方法 var obj = { name: 'zs', sex: 'nan', sayhi: function () { alert('sayhi') } } var obj = new Object({ name: 'zs', sex: 'nan', sayhi: function () { alert('sayhi') } })
利用字面量创建对象
- 对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法。 { } 里面采取键值对的形式表示
- 键:相当于属性名
- 值:相当于属性值,可以是任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
对象的调用:
- 对象里面的属性调用 : 对象.属性名 ,
console.log(obj.uname);这个小点 . 就理解为“ 的 ”- 对象里面属性的另一种调用方式 : 对象[‘属性名’],注意方括号里面的属性必须加引号,
console.log(obj['age']);我们后面会用- 对象里面的方法调用:对象.方法名() ,
obj.teC()注意这个方法名字后面一定加括号 ,或者另一种obj['address']()var obj = { uname: '可可', age: 5, type: '阿拉斯加', teC: function() { return '吃' }, address: function() { return '中国' } } console.log(obj.uname); console.log(obj['age']); console.log(obj.teC()); console.log(obj['address']()); //结果:可可 5 吃 中国
利用 new Object 创建对象
- 跟我们前面学的 new Array() 原理一致
- Object() :第一个字母大写
- new Object() :需要 new 关键字
- 使用的格式:对象.属性 = 值;
- 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
- 每个属性和方法之间用 分号结束
var obj = new Object(); obj.uname = '鸣人'; obj.age = 33; obj.skill = function() { console.log('影分身'); } console.log(obj['uname']); obj.skill()
利用构造函数创建对象
构造函数 :是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起 使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
在 js 中,使用构造函数要时要注意以下两点:
- 构造函数用于创建某一类对象,其首字母要大写
- 构造函数要和 new 一起使用才有意义
为什么需要构造函数:
- 通过构造函数创建的对象具有相同的属性与方法
- 构造函数属于函数的一种
- 通过构造函数创建的对象,成为实例
构造函数语法格式:
function 构造函数名() { this.属性 = 值; this.方法 = function() {} } new 构造函数名(); - ```js function Star(name, age, sex) { this.name = name this.age = age this.sex = sex } var ldh = new Star('刘德华', 20, '男') console.log(ldh.name); console.log(ldh['name']); //我们只要new Star() 调用函数就创建一个对象 zxy {} var zxy = new Star('张学友', 34, '男') console.log(zxy.sex); console.log(zxy); 构造函数注意点:
- 构造函数约定首字母大写。
- 函数内的属性和方法前面需要添加 this ,表示当前对象的属性和方法。
- 构造函数中不需要 return 返回结果。
- 如果return的是简单数据类型
return 'abc',不影响构造函数的返回值- 如果return的是复杂数据类型
return {name: 'ldh'},会影响构造函数的返回值- 当我们创建对象的时候,必须用 new 来调用构造函数。
new关键字(重要)
new 在执行时会做四件事情:
- 在内存中创建一个新的空对象。
- 让 this 指向这个新的对象。
- 执行构造函数里面的代码,给这个新对象添加属性和方法。
- 返回这个新对象(所以构造函数里面不需要return)。
遍历对象for in
for (变量 in 对象){}
// 遍历对象
var obj = {
name: '老师',
age: 18,
sex: '男',
fn: function() {}
}
// for in 遍历我们的对象
// for (变量 in 对象) {
// }
for (var k in obj) {
console.log(k); // k 变量 输出 得到的是 属性名
console.log(obj[k]); // obj[k] 得到是 属性值
}
// 我们使用 for in 里面的变量 我们喜欢写 k 或者 key
内置对象
- JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
- 内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的或是最基本而必要的功能(属性和方法)
- 内置对象最大的优点 就是帮助我们快速开发
- JavaScript 提供了多个内置对象:Math、 Date 、Array、String等
查文档
MDN: developer.mozilla.org/zh-CN/
如何学习对象中的方法
- 查阅该方法的功能
- 查看里面参数的意义和类型
- 查看返回值的意义和类型
- 通过 demo 进行测试
Math对象
console.log(Math.PI); console.log(Math.max(1, 33, 44)); // 取绝对值 console.log(Math.abs(-5)); //5 // 向下取整(往小了取)(地板函数) console.log(Math.floor(3.4)); //3 console.log(Math.floor(-5.5)); //-6 // 向上取整(往大了取)(天花板函数) console.log(Math.ceil(1.2)); //2 // 四舍五入 console.log(Math.round(5.5)); //6 // 注意: Math.round 遇到 .5 的情况则往大了取 console.log(Math.round(-1.5)); //-1 console.log(Math.round(-3.5)); //-3 console.log(Math.round(-5.4)); //-5 console.log(Math.round(7.6)); //8封装自己的数学对象 :
var myMath = { PI: 3.1415926, max: function() { var max = arguments[0] for (i = 1; i < arguments.length; i++) { if (arguments[i] > max) { max = arguments[i] } } return max }, min: function() { var min = arguments[0] for (i = 1; i < arguments.length; i++) { if (arguments[i] < min) { min = arguments[i] } } return min } } console.log(myMath.PI); console.log(myMath.max(11, -766, 777)); console.log(myMath.min(12, -3, 766, 777));
字符串操作方法(重点)
// 1. concat('字符串1','字符串2'....)
var str = 'andy';
console.log(str.concat('red'));
// 2. substr('截取的起始位置', '截取几个字符'); var str1 = '改革春风吹满地'; console.log(str1.substr(2, 2)); // 第一个2 是索引号的2 从第几个开始 第二个2 是取几个字符 //只操作复印件,不会影响原件// 1. 替换字符 replace('被替换的字符', '替换为的字符') 它只会替换第一个字符 var str = 'andyandy'; console.log(str.replace('a', 'b')); // 有一个字符串 'abcoefoxyozzopp' 要求把里面所有的 o 替换为 * var str1 = 'abcoefoxyozzopp'; while (str1.indexOf('o') !== -1) { str1 = str1.replace('o', '*'); } console.log(str1); // 2. 字符转换为数组 split('分隔符') 前面我们学过 join 把数组转换为字符串 var str2 = 'red, pink, blue'; console.log(str2.split(',')); var str3 = 'red&pink&blue'; console.log(str3.split('&'));