zoukankan      html  css  js  c++  java
  • 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的随机值

     


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

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


查看全文
  • 相关阅读:
    路径不对 导致FileNotFoundError: [WinError 2] 系统找不到指定的文件, 问题解决办法
    pycharm + selenium + python 提示 Unresolved reference 'webdriver' 解决办法
    highstock实现股票分时
    jquery 源码剖析1
    html 其它标签
    html5 基本内容 摘自W3C
    html总结
    web性能 部分
    linux常用命令 3
    linux常用命令 2
  • 原文地址:https://www.cnblogs.com/lifexy/p/14540500.html
  • Copyright © 2011-2022 走看看