先来搞内置对象。
实际上这么说不考究,我们只能说是当代码开始执行的时候,全局上下文会存在的内置对象。有两个,Global和Math。
其中Global在大多数情况下我们没有办法直接访问的,js规定它是一种兜底对象,我们在全局作用域上定义的所有变量和函数都会变成它的属性,包括isNaN( ),parseInt( )等。所以我们先不去做研究。
接下来到了Math。
Math
Math的功能是保存数学公式,信息和计算。
Math对象的部分属性:
属性 | 说明 |
Math.E | 自然对数的基数e的值 |
Math.LN10 | 10为底的自然对数 |
Math.LN2 | 2为底的自然对数 |
Math.LOG2E | 以2为底e的对数 |
Math.LOG10E | 以10为底e的对数 |
Math.PI | π的值 |
Math.SQRT2 | 2的平方根 |
Math对象的部分方法:
min( )和max( )
返回参数中的最小值/最大值
var min = Math.min(1,2,3,4);console.log(min); // 1
var max = Math.max(1,2,3,4);console.log(max); // 4
舍入方法
Math.ceil( ); | 向上取整 |
Math.floor( ) ; | 向上取整 |
Math.round( ) ; | 四舍五入 |
Math.fround( ); | 最接近的单精度(32位) |
绝对值
var abs = Math.abs(-2);console.log(abs); // 2
次方
var pow = Math.pow(2,3);console.log(pow); // 16;
操作符**也可以计算平方,上述代码写成var pow = 2**3; 同样是可以的。
随机数
Math.random( );
返回值为[0,1)中的一个随机值。
可选随机数的方法
function random(min, max) {var num = max - min + 1;return Math.floor(Math.random() * num + min);}
如果为了加密而使用随机数(需要高不确定性),请使用:
window.crypto.getRandomValues( );
然后我们来搞Array方法
Array方法
一、创建数组
1、构造函数创建数组:
var arr = new Array();
如果我们在构造函数中传入一个值:
var arr = new Array(10);
此时arr的length为10。
如果我们在构造函数中传出多个值:
var arr = new Array(10,20,30);
此时arr的length为3。
总结一下:
如果在使用构造函数创建数组的时候给构造函数传入了值。
那么当只有一个值且是数值的时候,会指定字符串长度;
当值是其他类型的时候,会创建一个包含该指定值的数组;
当是数值但是值有多个的时候,还是创建包含指定值的数组。
补充:
使用Array构造函数的时候可以省略new。
2、数组字面量
var arr1 = [];var arr2 = [1,2,3,4];
注意:
在数组最后一个元素后边加逗号会被省略。
使用字面量创建数组的时候不会调用Array构造函数。
3、Array构造函数的静态创建函数的方法:from( )和of( )
from( )
Array.from( )一共可以接收三个参数。
第一个参数是类数组对象(任何可迭代的结构)或有一个length属性和可索引元素的结构。
例子:将字符串拆分成单字符数组
var arr = Array.from("Hello");console.log(arr);
第二个参数是映射函数参数(可选)
var arr1 = [1, 2, 3, 4]var arr2 = Array.from(arr1, function (x) { return x = x ** 2;});console.log(arr2);
打印结果是[1,4,9,16];
第三个参数是用于指定映射函数中this的值。
of( )
Array.of( )可以把一组参数转换成数组。
var arr = Array.of(1, 2, 3, 4);console.log(arr);
打印结果是[1,2,3,4];
二、数组空位
假如我们这样创建了数组:
var arr = [,,,,,];
那么此刻arr的length为5,arr的每个元素的内容为undefined。
我们只是知道可以这么做就好了。
因为很多方法对数组空位的解决方法不一样。
map()会跳过空位置,join()视空位置为空字符串。
因为它行为的不一致所以在实践中尽量避免使用。
三、数组索引
数组索引值从0开始。
数组的最大索引始终是length-1;
所以我们可以用arr[length]来为数组添加元素。
四、检测数组
两个方法
1、关键字 instanceof——用来判断左侧对象是否是右侧类的实例。
2、内置方法:Array.isArray( );
五、迭代器方法
三个方法
1、keys( ); 返回数组索引的迭代器
2、values( ); 返回元素内容的迭代器
3、entries( ); 返回索引/值的迭代器
var arr = ["red", "yellow", "pink"];var keys = Array.from(arr.keys());var values = Array.from(arr.values());var entrues = Array.from(arr.entries());console.log(keys);console.log(values);console.log(entrues);
六、复制和填充方法
1、填充数组方法:fill( )
该方法可以向一个已有数组中插入全部或部分的值。
var arr = [0, 0, 0, 0, 0];arr.fill(5);console.log(arr); // [5,5,5,5,5]
该方法可以传三个参数:
**第一个参数代表填充元素;**
第二个参数代表待填充元素索引值的最小值(包含);
第三个参数代表待填充元素索引值的最大值。
其中,当第二个参数和第三个参数为负值时表示数组从末尾开始计算。
如果遇到以下情况填充可能会失败:
索引值过低或索引值过高
索引值反向:fill(2,4,2)
索引值部分可用的时候,填充可用的部分
2、批量复制方法:copyWithin( )
与fill不同,copyWithin( )会按照指定范围浅复制数组中的部分内容,然后将他们插入到指定索引开始的位置。
该方法同样可以传三个参数:
**第一个参数代表插入点的索引值;**
第二个参数代表待复制元素索引值的最小值(包含);
第三个参数代表待复制元素索引值的最大值。
其中,如果只写一个参数时在原索引或目标索引达到数组边界时停止。
js引擎在插值前会完整的复制范围内的值,因此复制期间不会存在重写风险。
如果遇到以下情况复制可能会失败:
索引值过低或索引值过高
索引值反向:fill(2,4,2)
索引值部分可用的时候,复制可用的部分
七、转换方法
不止数组,所有对象都有toLocaleString( ); toString( ); 和valueOf( ); 方法。其中:
toLocaleString( ): 转换为具有地区特色分隔符的字符串
toString( ): 转换为字符串
valueOf: 返回数组本身
var arr = [500, 1000, 1500];console.log(arr.toLocaleString());console.log(arr.toString());console.log(arr.valueOf());
如果对转换的数组我们想使用不同的分隔符可以使用join( )方法。
join( )方法仅有一个参数,即字符串分隔符。
八、栈方法
栈,先进后出。我们只是模拟,JS并没有栈。
推入:push();
弹出:pop();
九、队列方法
队列,先进先出。我们仍然是模仿。
从末尾进:push();
从开头出:shift();
与从开头出相反的操作——从开头进:unshift();
十、排序方法
两个。reverse( )和sort( )。
其中reverse( )就是字面意思——反向排序。
但是sort( )会在每一项上调用String( ),然后比较字符串来决定顺序。
还记着吗?
"10" > "5" // false"10"
所以用sort( )直接排序数值是不合适的。不过没关系,有一个方法:
arr.sort(function (a, b) { return a - b;})
其中 a - b 是从小到大排列
b - a 是从大到小排列
十一、操作方法
操作方法有很多,现在只搞三个常用的。
1、数组连接:concat()
将参数添加到现有数组的末尾,最后返回一个新数组。
注意:不影响原数组。
2、数组截取:slice()
该方法最多可以传入两个参数:返回元素的开始索引(包含)和结束索引(不包含)。
如果参数只有一个,则表示返回从当前索引开始直到数组结束。
注意:不影响原数组。
3、splice()
着重搞一下这个属性。究极强大。
其实这个方法的主要目的是在数组中间插值的。但是有三种不同的方式使用这个方法:
删除
需要传两个参数:要删除的第一个元素的位置和要删除的元素的数量
插入
需要传三个以上的参数:开始的位置,0(要删除的元素的数量),从第三个元素开始是要插入的元素。
替换
与插入类似,需要传三个以上的参数,但是由于第二个参数代表的是要删除的元素的数量,所以我们可以删除之后再插入新值。
提示:返回值是删除的元素
十二、搜索和位置方法
一共有五个,先说三个,剩下两个先知道就可以了。
搜索方法:
indexOf( )、lastIndexOf( )和includes( )
这三种方法都可以传两个参数:要查找的元素和一个可选的其实搜索位置。
其中第一个和第三个是顺序遍历,第二个是倒叙遍历。
其中第一个和第二个的返回值是查找到的元素的索引,第三个返回值是一个布尔类型,用来表示是否找到相同元素。
提示:这三种方法在比较时使用的时全等比较(===)。
另两种方法是find( )和findIndex( )。
十三、迭代方法
迭代方法有五个:
every():对数组每一项都运行传入的函数,如果对每一项函数都返回true,则这个方法返回true。
some():对数组每一项都运行传入的函数,如果有一项函数返回true,则这个方法返回true。
filter():对数组每一项都运行传入的函数,函数返回true的项会组成数组之后返回。
map():对数组每一项都运行传入的函数,返回由每次函数调用的结果构成的数组。
forEach():对数组每一项都运行传入的函数,没有返回值。
用forEach( )举例子:
var arr = [0, 10, 10, 10, 20];var max = arr[1];arr.forEach(function(item, index, arr) { if (item > max) { max = item; }});console.log(max); // 20
能看懂且会用最好,不会用没关系,看不懂就太妙了,后边九成会细讲。
现在阶段讲的新东西有点多,这里就先不拓展了,先知道有这些方法就够了,后边细讲的时候不会觉得突然。
好累。。没有废话了。。睡觉。。