渡一 14-1&2 三目运算符,数组,类数组

三目运算符
条件判断?是:否 并且会返回值

var num = 1 > 0 ? 2+2 : 1+1;
num //4

var num = 1 > 0 ? ('10' > '9' ? 1 : 0) : 2;
num //0  字符串先比每一位的ASC码,1<9

数组

定义方法

es3.0 es5.0 es6.0
ECMAScript DOM(html) BOM(浏览器)

var arr = [];
var arr = new Array(10); //10代表长度

var obj = {};
var obj = new Object();
var obj = Object.create();

方法

改变原数组:
push,pop,shift,unshift,sort,reverse,splice

push后面加
pop 后面删除
unshift 前面加
shift 前面删


不改变原数组
concat,join --> split,toString,slice

重写push方法

Array.prototype.push = function(){
    // return "haha";
    for(var i=0;i<arguments.length;i++){
        this[this.length] = arguments[i] //this谁调用就是谁
    }
    return this.length;
}
unshift - concat拼
for(var i=0;i<arr.length;i++){
    newArr.push(arr[i]);
}

splice

var arr = [1,1,2,2,3,3];
arr.splice(从第几位开始,截取多少的长度,在切口处添加新的数据)
arr.splice(1,2);    //返回被截取的1,2 arr=[1,2,3,3]
arr.splice(1,1,0,0,0) //arr=[1,0,0,2,2,3,3]

arr = [1,2,3,5]
arr.splice(3,0,4)

负数的位置实现
splice = function (pos){
    pos += pos > 0 ? 0 :this.length;
}

sort数组排序

arr=[1,3,4,0,-1,9]
arr.sort()           //升序
arr.sort().reverse //降序

arr=[1,3,5,4,10];
arr.sort() //[1,10,3,4,5] //当字符按ASC码排序

规则
1,必须写两形参
2,看返回值
  2-1 当返回值是负数时,那么前的面数放在前面 不动位置
  2-2 为正数,那么后面的数在前 互换位置
  2-3 为0,不动

arr.sort(function(a,b){
    /*
    var c = a > b ? 1 : -1;
    return c;
    */
    return a-b;//升序
    return b-a;//降序
})
给一个有序的数组,乱序
var arr=[1,2,3,4,5,6,7];

arr.sort(function(a,b){
    return Math.random()- 0.5; //-0.5得到负数
})
给对象按年龄排序
var cheng = {
    name : "cheng",
    sex : "male",
    age : 18,
    face : "handsome"
}
var deng = {
    name : "deng",
    sex : undefined,
    age : 40,
    face : "amazing"
}
var zhang = {
    name : "zhang",
    sex : "male",
    age : 20,
    face : "amazing"
}

var arr = [cheng,deng,zhang];
arr.sort(function(a,b){

    return a.age - b.age;

})
//按字符串长度排序
var arr = ['abc','bcd','cccc','dddd','asdfkhiuqwe','asdoifqwoeiu','asdf'];
arr.sort(function(a,b){
    return a.length - b.length;
})
//接字节长度来排序
function retByTes(str){
    var num = str.length;
    for(var i=0;i<str.length;i++){
        if(str.charCodeAt(i)>255){
            num++;
        }
    }
    return num;
}
var str = 'hello邓';
retByTes(str); //7
var arr = ['a邓','b邓','cc邓cc','老邓','残邓','asdoifqwoeiu','asdf'];
arr.sort(function(a,b){
    return retByTes(a) - retByTes(b);
})

concat,toString,join,slice

concat拼接
var arr = [1,2,3,4,5,6];
var arr1 = [7,8,9];
arr.concat(arr1) //新建立的数组

toString
var arr=[1,2];
arr.toString(); //"1,2"

slice截取
var arr = [1,2,3,4,5,6];
arr.slice(从该位开始截取,截取到该位)

arr.join("") //返回字符串
arr.split("") //是string方法,和join是逆向操作,转数组

var str="alibaba";
var str1="baidu";
var str2="tencent";
var str3="toutiao";
var str4="wangyi";
var str5="xiaowang";
var str6="nv";
var arr = [str,str1,str2,str3,str4,str5,str6];
arr.join() //默认是,联接 alibaba,baidu...
原文地址:https://www.cnblogs.com/lisa2544/p/15323090.html