在JS中,对象是一组无序的相关属性和方法的集合,所有事物都是对象,例如字符串、数值、数组、函数等。对象是具体的事物
对象是由属性和方法组成的,是属性和行为的结合体
为什么需要对象:
例:保存一个值使用变量,保存多个值使用数组,保存一个人的完整信息用对象。对象表达结构更清晰,更强大。
现阶段有三种方法来创建对象(object):
字面量、new Object、构造函数
对象字面量:花括号 { } 里面包含了表达这个具体事物(对象)的属性和方法。
{ } 里面采取键值对形式表示
键:属性名
值:属性值,任意类型的值(数字类型、字符串类型、布尔类型,函数类型等)
var star = {
name : '张三',
age : 18,
sex : '男',
sayHi : function(){
alert('大家好啊~');
}
};
与 new Array() 原理一致
var obj = new Object(); //创建了一个空的对象
obj.uname = '张三';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
console.log('hi~');
}
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi();
为什么要使用构造函数:因为一次只能创建一个对象,里面很多的属性和方法都是大量相同的,因此可以利用函数的方法,重复这些相同的代码,把这些函数称为构造函数。该函数中封装的是对象,就是把对象里面一些相同的属性和方法抽象出来封装到函数里
构造函数语法格式:
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {
}
}
new 构造函数名();
例:
function Person(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sayHi = function() {
alert('我的名字叫:' + this.name + ',年龄:' + this.age + ',性别:' + this.sex);
}
}
var bigbai = new Person('大白', 100, '男');
var smallbai = new Person('小白', 21, '男');
console.log(bigbai.name);
console.log(smallbai.name);
构造函数和对象:
new关键字在执行中会做的4件事:
for…in 语句用于对数组或者对象的属性进行循环操作。
in运算符:判断成员(属性)在对象中是否存在。存在返回true;不存在返回flase
语法:
for (变量 in 对象名字) {
// 在此执行代码
}
语法中的变量是自定义的,它需要符合命名规范,通常将这个变量写为 k 或者 key。
for (var k in obj) {
console.log(k); // 这里的 k 是属性名
console.log(obj[k]); // 这里的 obj[k] 是属性值
}
学习一个内置对象的使用,只要学会其常用成员的使用即可,可以通过查文档学习,通过MDN/W3C来查询。
Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。
MDN: https://developer.mozilla.org/zh-CN/
如何学习对象中的方法:
不是构造函数(不需要new来调用,而是直接使用),具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员。
Math.PI // 圆周率
Math.floor(x) // 向下取整(返回小于等于x,并且与它最接近的一个整数)
Math.ceil(x) // 向上取整(返回大于等于x,并且与它最接近的一个整数)
Math.round(x) // 四舍五入版 就近取整(返回最接近x的整数) 注意 -3.5 结果是 -3
Math.abs(x) // 返回x的绝对值
Math.max(args...)/Math.min(args...) // 求所有参数中的最大和最小值(无法找数组中的最大/最小值)
Math.pow(x,y) //返回x的y次方
Math.sqrt(x) //返回x的算术平方根
Math.random() //返回0.0到1.0之间的随机数
随机数方法 random():
random() 方法可以随机返回一个小数,其取值范围是 [0,1),左闭右开 0 <= x < 1
得到一个两数之间的随机整数,包括两个数在内
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
例:
console.log(Math.abs(-1)); //1
console.log(Math.abs('-1')); //隐式转换 会把字符串型-1转换为数字型
console.log(Math.abs('你好呀')); //NaN
console.log(Math.PI)
console.log(Math.abs(-7))
console.log(Math.max(12,5,78))
console.log(Math.pow(2,10))
console.log(Math.sqrt(2))
console.log(Math.random())
// console.log(Math.round(Math.random()))
// console.log(Math.floor(Math.random()*8))
console.log(Math.ceil(Math.random()*8))
方法名 | 说明 |
---|---|
getYear() | 指定Date对象date的年份字段减去1900 |
getTime() | 表示Date对象距离1970年1月1日午夜(GMT时间)之间的毫秒数 |
toLocaleDateString() | 将Date对象转换成本地的日期格式 |
var date2 = new Date(2021, 4, 22, 10, 17, 55)
console.log(date2) //月份从0-11
var date3 = new Date('2021-05-22')
console.log(date3)
var date4 = new Date('2021-05-22 10:19:27') //用的最多
console.log(date4)
var date5 = new Date('2021-05-22 10:19:27') //用的最多
console.log(date5) //获取的是当前年份减去1900
创建数组对象的两种方式:
检测是否为数组:
var arr = [1, 23];
var obj = {
};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
添加/删除数组元素:
数组排序:
注意:sort() 默认是按字符编码顺序排序;若要按其他顺序排序,需自定义函数
var arr = [1, 64, 9, 6];
arr.sort(function(a, b) {
return b - a; // 降a序
// return a - b; // 升序
});
console.log(arr);
数组的索引:
方法名 | 功能描述 |
---|---|
indexOf(数据) | 返回在数组中可以找到给定值的第一个索引,如果不存在,则返回-1 |
lastIndexof(数据) | 返回指定元素在数组中的最后一个索引,如果不存在则返回-1 |
数组转换为字符串:
连接数组、返回数组的部分元素:
删除数组元素:
方法名 | 说明 |
---|---|
splice(start) | 删除从start开始的数组元素 |
splice(start,delCount) | 删除从start开始的delCount个元素 |
splice(start,delCount,value…) | 删除的同时插入数据,删除从start开始的delCount个元素,将value插入到start开始的位置 |
slice() 和 splice() 目的基本相同,建议重点看下 splice()
string对象:字符串对象,必须使用new String()来创建
查询:
方法 | 功能描述 |
---|---|
indexOf(search Value) | 获取searchValue在字符串中首次出现的位置,如果找不到就返回-1,开始的位置是index索引号 |
lastIndexOf(search Value) | 获取search Value在字符串中最后出现的位置 |
方法 | 功能描述 |
---|---|
Substr(start,length) | 从start开始提取length个字符构成一个新串 |
Substring(from,to) | 提取from和to(不含to)之间的字符构成一个新串 |
Split(‘分隔符’) | 将字符串按给定的分隔符,转换成字符串数组 |
toLowerCase() | 将串中的大写字符转换为小写,不影响原串,返回一个新串 |
toUpperCase() | 小写—>大写 |
Replace(str1,str2) | 使用str2替换字符串中的str1,返回替换结果,只会替换第一个str1 |
值类型:简单的数据类型(字符串、数值型、布尔型、undefined、null)
引用类型:复杂的数据类型(对象)。变量中保存的是引用的地址
var o = { }