【无标题】

一、数组的操作方法
1、reverse()反转数组
        var arr=[1,2,1,3,5,4,6,2,6,2,8]
        console.log(arr);
        console.log(arr.reverse());
2、join  指定分隔符,将数组转换为字符串

3、concat
连接数组将数据添加到数组的末位,不修改原数组生成新数组
只能打散一维数组,不会打散数组中包含的数组

4、slice 截取子数组
不修改原数组,生成新数组 起始包含终止不包含
负数倒着截取

5、splice  增加和删除数组元素
splice(arg1,arg2,arg3...)
arg1 起始位置    如只有一个参数 表示从起始位置删除后面的所有元素,修改原数组返回被删除的元素
    如第一个参数为负数,从右到左
arg2 表示被删除的元素个数 第二个为负数 按0
arg3即后边所有参数是要插入的元素

6、数组删除
splice()
delete 只删除元素本身,不删除空间

二、字符串拼接的操作效率
        var s1="hello"
        var sums1=[]
        var b= new Date().getMilliseconds()
        for(var i=0;i<1000000;i++){
            sums1.push('hello')
        }

        // for(var i=0;i<1000000;i++){
        //     sums1.concat(s1)
        // }
        var a=new Date().getMilliseconds()
        num=a-b
       
        console.log( parseInt(num));
            console.log(sums1);
三、数组的检测
typeof(a1)
1、Array.isArray(a1)  true 
2、if(a1 instanceof Array){}  
3、a1.comstructor==Array

四、数组的toString()
所有的对象都有toStrring() valueof() toLocalstring()
toString() :每个值的字符串形式,然后以逗号分隔,进行拼接

五、数组下标
范围:大于0 小于2的23次幂-1

如下标为负数、浮点数、布尔型 js自动转换成字符串

下标是可以不断递增的表达式


六、排序
sort(比较函数)
比较函数有两个参数f1(a,b)
    函数只判断返回值
    返回值大于0 a排在b的后面
    返回值小于0 a排在b的前面
    返回值等于0 a,b不动

      var arr1 = [23, 4, 5, 12, 78, 16]
        function f1(a, b) {
            // return a-b
            if (a - b > 0) {
                return 1
            } else if (a - b < 0) {
                return -1
            } else if (a - b==0) {
                return 0
            }
        }
        console.log(arr1.sort(f1));

1、indexOf()
返回数组中第一个找到的元素的位置,不存在返回-1

2、forEach()
数组.forEach(function(当前元素的值,当前元素索引,数组对象){})


3、map
对数组每一项进行遍历
map与forEach 区别
                1、forEach只是遍历,map生产新数组
                2、map速度快
                3、map可以链式操作
                
            var a1=[1,2,3,4]
           a1=  a1.map(function(item,index,arr){
                return item*2
               
            }).map(function(item1){
                return item1*10
            })
            console.log(a1);

a1=[3,4,5,6]
4、filter 数据过滤
    arr.filter(function(当前元素的值,当前元素索引,数组对象{}))
    (1)、返回新数组,不对原数组修改
    (2)、对返回"true"的结果过滤,false结果忽略
5、reduce 接收一个函数作为累加器,数组中的每一个值从左到右开始缩减,最终计算成一个值
arr.reduce(function(初始值,当前元素的值,当前元素索引,数组对象{}),初始值(可省略))
       a1=[1,2,3,4,5]
//        a1=["a","b","c",4,5]
       a2=a1.reduce(function(init,currentvalue,index,arr){
           console.log(init,currentvalue,index,arr)
           return init+currentvalue
       })
       console.log(a2)

6、some
判断数组是否右满足条件的元素
(1)、arr.
(2)、函数内部、返回true,找到了满足条件的元素,则循环结束
        返回false循环继续
(3)、函数的执行次数不一定等于数组长度

判断是否存在大于20的元素
a1.some(function(item,index,arr){
    return item>20
})


7、every 检测数组中所有元素是否都满足条件
一项不满足就返回false

一、浮点精度问题
1、产生原因
js数值型包含整数、浮点---Number 固定按64位算 

最高位--符号位    存储指数
      1            11位

0.1
0.0001100 1100 1100......(1100循环)
0.2
0.0011001100110011.....(0011循环)


0.1+0.2 相加有多余部分被舍掉,产生误差

二、解决办法
0.1+0.2=0.3
 (1)、乘以10 再计算  
    let x = (0.1 * 10 + 0.2 * 10) / 10
    console.log(x);
(2)、toFixed()截取位数四舍五入
    a=0.1+0.2
    a.toFixed(1) 0.3
    

三、包装类型
    Number  Boolean String

 1、(1)、包装类型中的String 需要new String()创建
    (2)、typeof返回object 对象
    (3)、当sring有多个参数,只处理第一个,
    (4)、当sring有多个参数,只处理第一个,.但是js会将整个代码执行完

   s1="hello" 后台操作 s1=new String("hello")
    s2=s1.sunstring(2)      s2=substring(2)
                            s1=nul 销毁

    s3="hello"
    s4=new String("hello")
    typeof(s3) String
    typeof(s4)  object

            var n=1
            s1=new String(++n,n++,++n)
            s2=new String(1,2,3,4)
    console.log(n);  4
    console.log(s1);  {2}
2、包装类型Boolean
    v1=false
    v2=v1&&true  false

    v1=new  Boolean(false)
    v2=v1&&true  true
任何object对象准换位Boolean都为true


    v3=false
    v4=new Boolean(false)
    console.log(typeof(v3));  基本数据类型
    console.log(v4);                object

    instanceof  判断是否为对象实例
    console.log(v3. instanceof Boolean); false
    console.log(v4. instanceof Boolean) ;true

3、包装类型Number
v1=23
v2=new Number(23)

typeof(v1)  Numb
typeof(v2)  object

v1 instanceof Number false
v2 instanceof Number  true


三、值类型与引用类型
1、值类型传递采用基础数据类型,String Number Boolean null undefined
    存储在栈内存中,占据的空间是固定的
2、引用类型采用地址传递,array function object
    堆内存中存储的一般都是object,通过一个地址编号(引用指针)
    传递给栈内存变量,读取数据的时候,由引用指针到堆内存找数据块
    占据的空间是不固定的
3、拆箱与装箱
装箱:将值类型包装为对应的引用类型对象
var a=12 
b=new Number(12) 装箱

拆箱:引用类型-->值类型 valueof()
c=new Number(23)
var d=c.valueof()
typeof(d)  Number

四、深拷贝与浅拷贝   针对引用类型
1、浅拷贝:拷贝基本数据类型不会受影响
          拷贝引用类型源对象会被修改
          白话文:加入b复制a时 当修改a时,b也跟着变化
          仅拷贝对象地址
        var arr=[1,2,3]
        var arr2=arr 
        arr.push(4)
        console.log(arr2);[1,2,3,4]
        console.log(arr);[1,2,3,4]
2、深拷贝:拷贝一个基本数据对象之前,先给拷贝的对象创建一个
         新地址,这样当拷贝的对象指向对象改变时,被拷贝的对象堆中数据不会改变
        白话文:a复制b,当修改a时,b不变

 (1) 、 创建新数组,for循环复制
        var a1=[1,2,3]
        var a2=[]
        for(var k in a1){
            a2.push(a1[k])
        }
        a1.push(4)
        console.log(a1);
        console.log(a2);

(2)、数组方法slice
        var arr = [1, 2, 3, 4, 5]
        var arr2 = arr.slice(0)
        arr.push(6)
        console.log(arr)
        console.log(arr2)

(3)、数组方法 concat
        var arr = [1, 2, 3, 4, 5]
        var arr2 = arr.concat()
        arr.push(6,7)
        console.log(arr)
        console.log(arr2)
(4)、json.parse(JSON.Stringify)
        var arr=[1,2,3,4];
        var arr2=JSON.parse(JSON.stringify(arr))
        arr.push(18)
        console.log(arr, arr2)

(5)、ES6扩展运算符实现
        var arr = [1, 2, 3, 4, 5]
        var [...arr2] = arr
        arr.push("李")
        console.log(arr)
        console.log(arr2)


3、手动封装深浅拷贝
    copyfun(对象,true)   true--深拷贝   false--浅拷贝
                         return 拷贝后的对象

    a1 =[1,2,3]
    a2=copyfun(a1,false) a1变,a2变
    a3=copyfun(a1,true)  a1变,a3不变
    
    typeof(obj)   --object
    args instanceof Array
    Array.isArray(args)

一、函数:
1、函数是完成某一功能的一组语句,它接受0或多个参数,执行函数体,完成某个功能,最后返回处理结果
2、function(参数){
    函数体
    return 结果
}
3、函数的定义方式
    (1)、普通函数
        关键字:var let const for while switch
        function f1(){
            var a=10
            var b=10*2
            return b
        }
        调用
        var resultf1() 20
    (2)、函数表达式
    var f1=function(){
            var a=10
            var b=10*2
            return b
    }
    var result=f1()

    (3)、立即执行函数(匿名函数、立即执行函数)
    (function(a){alert(Math.pow(a,2))})(3)

    (4)、函数创建对象
    var f1=new Function(前面为参数,最后一个是函数体和返回值)
     var f1=new Function("a","alert(a*10)")
    f1(3)

    
    var f1=new Function("a","return (a*10)")
   var c=f1(3)
   console.log(c);


   var f1=new Function("a","b","c","return a+b+c")
   var c=f1(3,4,5)
   console.log(c);


   var f1=new Function("a","b"," c=a+b; return c")
    var d=f1(3,4)
    console.log(d);
4、函数的参数
(1)、普通参数
    function f1(a,b){//形参
        return a+b
    }
    f1(2,3)//实参
(2)、ES6 函数参数:默认参数可以有多个,但必须放在末尾
    function f1(a,b){//形参
        return a+b
    }
    f1(2,3)//实参

    [2]不定长参数
    function f1(...args){
        log
    }
    f1(2,3,4)

    [3]参数管理器 arguments 
    不是数组但可以按数组的方式用,可以用数组的形式调用实参值 
    for循环能用,

    [4]形参长度--函数名.length
    function f1(a,b){
        arguments.length  //实参的长度
        f1.length   //形参长度


        //形参实参长度相同判断f1.length== arguments.length  

    }
    f1(a,b)


5、返回值--只能有一个
        (1)、如有多个返回值,可返回数组
        function f1(){
            c=a+b
            d=a-b
            return [c,d]
        }
        f1(2,3)
        (2)、返回函数
        function f1(a,b){
            function f2(){
                return a+b
            }
            return f2
        }
        f1(1,2)


        function f1(a,b){
    function f2(){
        function f3(){
            return Math.pow(a+b,2)
        }
        return f3
    }
    return f2
}
console.log(f1(2,3)()());

        (3)、var a=1
        function f1(){
            a++
            return f1
        }
        f1()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值