4.qml-ECMAScript(Array对象、Math对象)

在上章学习了:3.qml-ECMAScript_03(Object基类对象、String对象)

本章我们来初步学习Array对象和Math对象.

Array数组对象

ECMAScript提供了Array数组对象,并且该Array的元素类型还可以各个不同.

创建空数组:

var arr1 = new Array();
var arr2 = new Array;
var arr3 = [];
console.log(arr1.length,arr2.length,arr3.length);

创建有内容的数组

var arr4 = [5];            // 数组长度为1,arr4[0] = 5
var arr5 = new Array(5);   // 数组长度为5,内容未初始化
var arr6 = new Array("5",5,123,true); // 数组长度为4,内容已初始化
var arr7 = [1,2,3];                   // 数组长度为3,内容已初始化
console.log(arr4.length,arr5.length,arr6.length,arr7.length) //打印:1 5 4 3
console.log(arr4,arr5,arr6,arr7)     // 打印: [5] [undefined,undefined,undefined,undefined,undefined] ["5",5,123,true] [1,2,3]

通过下标读写数组

var arr = new Array("5",5,123,true); // 数组长度为4,内容为["5",5,123,true]
console.log(arr[0] == arr["0"]); // 通过下标访问数组时,字符串"0"和数字0是一样的.
arr[0] =6; // 通过下标更改数组内容
arr[-1.2] = 100; // 由于-1.2,不是数组成员,所以会把-1.2转为字符串,创建名为'1.2'的属性,并赋值100

for (var index in arr) { // 循环打印数组属性成员
    console.log("for:",index,arr[index])
    // 打印: for: 0 5
    // for: 1 5
    // for: 2 123
    // for: 3 true
    // for: -1.2 100
}

通过更改length来改变数组长度

var arr =[1,2,3,4];

arr.length=2; // 删除了数组3,4元素

arr.length=0; // 重置数组

arr.length=5; // 重新声明长度,但是内容是未定义的,等价于var arr5 = new Array(5);

判断数组类型

  • Array.isArray(arr) : 判断arr是否是数组类型.
  • arr instanceof Array : 判断arr是否是数组类型.

数组对象提供的方法

  • arr.toString() : 打印数组内容
  • arr.reverse() : 将arr的内容进行倒序排列.
  • arr.sort()  :  排序,将内容转化为字符串,进行从小到大排列.
  • arr.sort(function) : 提供一个排序方法进行排序,返回正数的话,参数1会调整在后面,返回负数的话,参数2会调整在后面

示例如下:

var arr = new Array(5,5,1,2,3,4,13,true,false,"s","u"); 
arr.sort();
console.log(arr); // 打印:[1,13,2,3,4,5,5,s,true,u],说明都是将内容转化为字符串,进行字母正序排列

console.log(typeof arr[7] == "boolean");

// 自己提供排序方法进行排序,bool类型排在前面,字符串类型排在中间,数字类型排在后面
arr.sort( function(a,b) {
    if (typeof a == typeof b) {
        if(a > b) {
            return 1;
        } else {
            return -1;
        }
    } else if (typeof a == "number" || typeof b == "number") {
        if(typeof a == "number") {
            return 1;
        } else {
            return -1;
        }
    } else if (typeof a == "string" || typeof b == "string") {
        if(typeof a == "string") {
            return 1;
        } else {
            return -1;
        }
    }
});

console.log(arr); // 打印 [false,true,s,u,1,2,3,4,5,5,13]

console.log(arr.toString()); // 打印 false,true,s,u,1,2,3,4,5,5,13    
  • arr.join(str) : 在每个元素中添加分隔符,并返回字符串,如果不带参数,那么arr.join()等价于arr.toString().
  • arr2 = arr1.concat(arr3,arr4...) : 连接多个数组并返回一个新数组,所以arr2 = arr1+arr3+arr4.并且不会改变arr1自身内容.
  • arr.slice(start,end) : 获取数组中的一部分,和String的slice()类似,var1表示数组元素起始位置,var2表示数组元素终止前位置(不包含在内),如果省略var2参数,则默认终止位置在数组末尾.
  • arr.splice(index,number,insert1,inset2...) : 替换数组内容,index表示要被替换的起始下标,number表示被替换的元素个数,然后后面参数是要插入的任意个元素,该方法会改变对象自身内容,并且返回删除掉的元素内容.
  • arr.splice(1,3) : splice除了替换内容外,还可以当成删除数组元素使用,这里表示从数组下标1,删除3个元素.
  • arr.splice(2,0,1,2,3 ,"456"):splice除了替换内容外,还可以当成添加数组元素使用,这里表示从数组下标2开始,添加4个数组元素:[1,2,3,"456"]

示例如下所示;

var arr =[1,2,3,4,5,6,7];
console.log(arr.slice(2));   // 打印[3,4,5,6,7]
console.log(arr.slice(2,5)); // 打印[3,4,5]
console.log(arr.slice(2,-1)); // 打印[3,4,5,6]
arr.splice(1,3); // 从[1,2,3,4,5,6,7]删除掉[2,3,4]
console.log(arr); // 打印[1,5,6,7]
arr.splice(2,0,1,2,3,"456"); // 在下标1位置处插入[1,2,3,"456"]
console.log(arr); // 打印[1,5,1,2,3,456,6,7]
  • arr.push(arg1,arg2,...) : 入栈,向数组的尾部添加元素,并返回数组新的长度。
  • arr.pop() : 出栈,删除尾部的最后一个元素,并返回删除的元素
  • arr.shift() : 删除数组的头部的第一个元素,并将删除的元素返回。
  • arr.unshift(arg1,arg2,arg3....) :向数组的头部增加一个或多个元素,并返回数组的长度。
  • arr.forEach(function(elem,index,arr)) : 遍历数组,不会改变对象自身内容,elem为遍历的元素,index为元素的下标,arr为数组本身。该方法只是遍历操作数组,不会有返回值,并且是无法使用continue,break这些关键字
  • arr.map(function(elem,index,arr)) :遍历数组,不会改变对象自身内容,并返回一个新的数组
  • arr.filter(function(elem,index,arr)) :过滤元素, 不会改变对象自身内容,并返回一个新的数组
  • arr.some(function(elem,index,arr)) : 或判断, 函数内只要一个是返回true的,则返回true.
  • arr.every(function(elem,index,arr)) : 与判断, 函数内只要一个是返回false的,则返回false.
  • arr.indexOf(elem,index) : 从arr数组中index下标位置往前搜索是否有elem元素,如果不存在,则返回-1,否者返回找到的元素下标位置
  • arr. lastIndexOf (elem,index) : 和indexOf相反,是反向搜索.

示例如下所示:

var arr =[1,2,3,4,5,6,7];

arr.forEach(function(elem,index,arr) {
  elem += 1;
});
console.log(arr); // 打印[1,2,3,4,5,6,7],由于"elem += 1;"中的elem是定义的临时变量进行+1的,所以根本没有改变对象自身内容

var arr2 = arr.map(function(elem,index,arr) {
  return elem *= 2; // 返回到arr2中
});
console.log(arr2); // 打印[2,4,6,8,10,12,14]

var arr3 = arr.filter(function(elem,index,arr) {
  if (elem%2 == 1) { // 过滤,只要奇数内容
    return elem;
  }
});
console.log(arr3); // 打印[1,3,5,7]

var result1 = arr.some(function(elem,index,arr) {
  return (elem === 3);
});
console.log(result1); // 打印true

var result2 = arr.every(function(elem,index,arr) {
  return (elem === 3);
});
console.log(result2); // 打印false

console.log(arr.indexOf(3,1)); // 查找数字为'3'的索引值,打印2,因为arr[2] = 3

Math对象

参考https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math

Math对象可以不用创建直接使用Math.属性和Math.方法名();

它的属性有

  • E : 返回自然常数 e,即自然对数的底数,(1+1/n)的n次方,n趋于无穷大(约等于2.71828...)
  • LN2 : 返回 2 的自然对数,也就是log(e)^2的值(约等于0.693)。
  • LN10 : 返回 10 的自然对数,也就是log(e)^10的值(约等于2.302)。
  • LOG2E : 返回以 2 为底的 e 的对数,也就是log(2)^e的值(约等于 1.414)。
  • LOG10E : 返回以 10 为底的 e 的对数,也就是log(10)^e的值(约等于0.434)。
  • PI : 返回圆周率(约等于3.14159)。
  • SQRT2 : 返回 2 的平方根(约等于 1.414)。
  • SQRT1_2 : 返回返回 2 的平方根的倒数,也就是1/SQRT2的值(约等于 0.707)。

三角方法

  • tan(x) : 返回x弧度值的正切。
  • cos(x) : 返回x弧度值的余弦。
  • sin(x) : 返回x弧度值的正弦。
  • acos(x) : 返回x余弦值的弧度值,
  • asin(x) : 返回x正弦值的弧度值。
  • atan(x) : 返回x正切值的弧度值, 算得的Y值在[-pi/2,pi/2]之间
  • atan2(y,x) : 返回(x,0)轴与 (x,y) 轴 之间的弧度值(介于 -PI/2 与 PI/2 弧度之间)。

sin、cos、tan、cot度数表如图所示:

 

示例如下所示:

var angle = 45;
var arc = angle/180 * Math.PI;  // 将45°转换为弧度

console.log(arc);           // 45°的弧度值,打印 0.7853
console.log(Math.cos(arc)); // cos45°的值,打印 0.7071067811865476
console.log(Math.sin(arc)); // sin45°的值,打印 0.7071067811865476
console.log(Math.tan(arc)); // tan45°的值,打印 0.9999999999999999

console.log(Math.acos(0.7071)*180/Math.PI); // 将cos45°的值转换为角度值acos45°的值,打印45°
console.log(Math.asin(0.7071)*180/Math.PI); // asin45°的值,打印45°
console.log(Math.atan(1)*180/Math.PI);      // atan45°的值,打印45°

console.log(Math.atan2(Math.sqrt(3),3)*180/Math.PI); //(根号3,0)轴与 (根号3,3)轴之间的角度值,打印30°

其它方法

  • max(arg1,arg2,arg3...)  : 返回传入参数中的最高值。
  • min(arg1,arg2,arg3...)   :  返回传入参数中的最高值。
  • abs(x) : 返回数的绝对值,不会修改x本身值.
  • ceil(x) : 中文意义天花板,意思返回x的向下取整值,不会修改x本身值.
  • floor(x) : 中文意义地板, 意思返回x的向下取整值,不会修改x本身值.
  • round(x)  :  返回x的四舍五入整数,算法为Math.floor(x+0.5), 比如round (11.2)= floor(11.7)=11, round(11.6)= floor(12.1)=12
  • random()  :  返回 0 ~ 1 之间的随机数, 如果想要范围更大的随机值,则需要再乘以一定的数值来实现。
  • pow(x,y)  :  返回 x 的 y 次幂。
  • exp(x)  : 返回e的x方值
  • log(x)  : 返回x的自然对数(log(e)^x的值)
  • sqrt(x)  : 返回x的平方根,比如sqrt(4) = 2
  • valueOf()  : 返回 Math 对象的原始值。
  • toSource()  : 返回该对象的源代码。

示例如下所示:

var x = 25.4;

console.log(Math.ceil(x));     // 向上取整,26

console.log(Math.round(x)); // 四舍五入, 25

console.log(Math.floor(x));  // 向下取整,25

console.log(Math.sqrt(4));  // 平方根,2

console.log(Math.random());   // 返回 0 ~ 1的随机值

console.log(Math.random() * 2); // 返回 0 ~ 2的随机值

console.log(10 + Math.random() * 10); // 返回 10 ~ 20的随机值

 


人间有真情,人间有真爱。

如果您喜欢这里,感觉对你有帮助,并且有多余的软妹币的话,不妨投个食吧,赞赏的时候,留下美句和你的博客地址哦~   戳这里看谁投食了


【推广】 免费学中医,健康全家人
原文地址:https://www.cnblogs.com/lifexy/p/14540500.html