JavaScript 中的对象分为3种:自定义对象 、内置对象、 浏览器对象
内置对象就是指 JS 语言自带的一些对象,这些对象供开发者使用,并提供了一些常用的最基本而必要的功能(属性和方法),
内置对象最大的优点就是帮助我们快速开发
JavaScript 提供了多个内置对象:Math、 Date 、Array、String等
查文档
查找文档:学习一个内置对象的使用,只要学会其常用成员的使用即可,我们可以通过查文档学习,可以通过MDN/W3C来查询。 Mozilla 开发者网络(MDN)提供了有关开放网络技术(Open Web)的信息,包括 HTML、CSS 和万维网及 HTML5 应用的 API。 MDN:MDN Web Docs
Math 对象它具有数学相关的属性和方法。跟数学相关的运算可以使用 Math 中的成员。
属性、方法名 | 功能 |
---|---|
Math.PI | 圆周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 四舍五入版 就近取整 注意 -3.5 结果是 -3 |
Math.abs() | 绝对值 |
Math.max()/Math.min() | 求最大和最小值 |
Math.random()/Math.pow()/Math.sqrt() | 获取范围在[0,1)内的随机值//求指数次幂/求平方根 |
Date 用来处理日期和时间
Date是一个构造函数,所以使用时需要实例化才能使用其中方法和属性
获取当前时间必须实例化:
var now = new Date();
注意:如果创建实例时并未传入参数,则得到的日期对象是当前时间对应的日期对象
获取指定时间的日期对象
var now = new Date('2019/5/1');
Date()
构造函数有四种基本形式
1.new Date();
2.new Date(dateString);
3.new Date(value);
4.new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
使用Date实例的方法和属性
方法名 | 说明 |
---|---|
getFullYear() | 获取当前年 |
getMonth() | 获取当前月(0 -11) |
getDate() | 获取当前日期 |
getDay() | 获取当前星期(周日0 - 周六6) |
getHours() | 获取当前小时 |
getMinutes() | 获取当前分钟 |
getSeconds() | 获取当前秒钟 |
总毫秒数的含义
基于1970年1月1日(世界标准时间)起的毫秒数
获取总毫秒数
// 实例化Date对象
var now = new Date();
// 1. 用于获取对象的原始值
console.log(date.valueOf())
console.log(date.getTime())
// 2. 简单写可以这么做
var now = + new Date(); +相当于Number()
// 3. 静态成员,HTML5中提供的方法,有兼容性问题
var now = Date.now();
instanceof 运算符
instanceof 可以判断一个对象是否是某个构造函数的实例
var arr = [1, 23];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
Array.isArray()
判断一个对象是否为数组
var arr1 = new Array()
var arr2 = []
var arr3 = {}
console.log(Array.isArray(arr1));//true
console.log(Array.isArray(arr2));//true
console.log(Array.isArray(arr3));//false
valueOf()
返回对象本身
var arr = [1, 2, 3]
console.log(arr.valueOf());
方法名 | 说明 | 返回值 |
---|---|---|
push(param1...) | 向数组末尾添加一个或多个元素,会修改原数组 | 返回新数组长度 |
pop() | 删除数组最后一个元素,会修改原数组 | 返回删除的元素值 |
unshift(param1...) | 向数组开头添加一个或多个元素,会修改原数组 | 返回新数组长度 |
shift() | 删除数组的第一个元素,会修改原数组 | 返回删除的元素值 |
方法名 | 说明 | 是否修改原数组 |
---|---|---|
reverse() | 颠倒数组中的顺序,无参数 | 改变,返回新数组 |
sort() | 对数组中元素排序 | 改变,返回新数组 |
注意:sort方法需要传入参数来设置升序、降序排序
var arr = [1, 2, 3, 4]
arr.reverse();
console.log(arr);//[4,3,2,1]
arr.sort()
console.log(arr);//[1,2,3,4]
function desc(a, b) {
// return a - b //升序
return b - a //降序
}
arr.sort(desc)
console.log(arr);
方法 | 说明 | 返回值 |
---|---|---|
toString() | 把数组转换为字符串,逗号分隔每一项 | 返回一个字符串 |
join('分隔符') | 把数组中所有元素转换为一个字符串 | 返回一个字符串 |
var arr = [1, 2, 3, 4]
console.log(arr);//[1,2,3,4]
console.log(arr.toString())//1,2,3,4
arr = arr.join('。')
console.log(arr)//1。2。3。4
注意:join方法如果不传入参数,则按照 “ , ”拼接元素,同toString方法
方法名 | 说明 | 返回值 |
---|---|---|
indexOf() | 查找数组给定元素的第一个索引 | 如果存在,返回索引号,如果不存在,则返回-1 |
lastIndexOf() | 查找数组给定元素的最后一个索引 | 如果存在,返回索引号,如果不存在,则返回-1 |
var array = ["c", "a", "z", "a", "x", "a"]
//console.log(array.indexOf("a"));//1
//console.log(array.indexOf("a", 2)); //表示从索引为2的位置开始查找a 的位置
//console.log(array.lastIndexOf("a"));//5
// 方式1 推荐
arr = [];
// 方式2
arr.length = 0;
// 方式3
arr.splice(0, arr.length);//从索引0的位置开始,要删除的个数
方法 | 说明 | 返回值 |
---|---|---|
concat() | 连接2个或者多个数组,不影响原数组, | 返回一个新数组 |
slice(start,end) | 数组截取 | 返回被截取项目的新数组 |
splice(start,length) | 数组删除,start:开始索引,删除元素的长度 | 返回被截取项目的新数组 |
var array1 = [1, 2, 3]
var array2 = [4, 5, 6]
var newArr = array1.concat(array2)
console.log(newArr);
var array1 = ["red", "green", "blue", "yellow"];
array1 = array1.splice(1, 2)
console.log(array1);//green,blue
var array = [10, 20, 30, 40];
var arrayNew = array.splice(1, 2);
console.log(array);//10 40
console.log(arrayNew);//20 30
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,
由于字符串的不可变,在大量拼接字符串的时候会有效率问题
方法名 | 说明 |
---|---|
indexOf('要查找字符', 开始位置) | 返回指定内容在字符串中的位置,找不到返回-1, |
lastIndexOf() | 从后往前找,只找第一个匹配的 |
var str = '改革春风吹满地,春天来了';
console.log(str.indexOf('春'));//
console.log(str.indexOf('春', 3)); //从索引号是 3的位置开始往后查找
charAt(index) 返回指定位置的字符,index是字符串的索引号
var str = '未来';
console.log(str.charAt(3));//来
// 遍历所有的字符
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
方法名 | 说明 |
---|---|
concat() | 连接两个或多个字符串,拼接字符串,等效+ |
substr(start,length) | 从start位置开始,length截取的长度 |
slice(start,end) | 从start位置开始,截取到end位置,end取不到 |
substring(start,end) | 从start位置开始,截取到end位置,end取不到,和slice相同,但是不接受负值 |
var str1 = 'codingfuture';
var str2 = '未来';
var newStr = str1.concat(str2);
console.log(newStr);//codingfuture未来
var res = newStr.substr(0, 3)
console.log(res);//cod
res = newStr.slice(3, 5)
console.log(res);//in
res = newStr.substring(3, 5);
console.log(res);//in
.替换字符 replace('被替换的字符', '替换为的字符') 它只会替换第一个字符
23字符串.split("分割字符"), 返回数组
简单数据类型:string ,number,boolean,undefined,null
复杂数据类型:Object、Array、function、Date
堆栈空间分配区别:
栈:由操作系统自动分配的空间,用来存储简单数据类型。
堆:由操作系统自动分配的空间,用来存储存储复杂类型。
JS中没有堆和栈的概念,我们是通过堆栈的方式让大家更容易理解一点代码的执行方式,将来也方便学习其他语言
简单数据类型的存储方式
简单数据类型声明在栈中,数据存储在栈中
var n1 = 10;
var n2 = n1;
n1 = 20;
console.log(n2);
复杂数据类型的存储方式
复杂数据类型声明在栈中,数据存储在堆中,
function Person(name, age) {
this.name = name;
this.age = age;
}
var p1 = new Person("zs", 18)
console.log(p1);
var p2 = p1;
console.log(p2);
p1.name = "ls"
console.log(p2.name);
值传递:是把值赋值一份传递给了函数,所以函数内改变的只是赋值的那一份
var x = 10;
fn(x);
console.log(x);
function fn(a) {
a++;
console.log(a);
}
引用传递:是把地址赋值一份传递给了函数
function Person(name, age) {
this.name = name;
this.age = age;
}
var p = new Person('张学友', 18)
fn(p);
console.log(p.name);
function fn(people) {
people.name = '刘德华';
}