颠覆认知的『JavaScript』篇——16 数组方法、类数组

一、数组方法

1. concat

两数组的拼接,不会改变原数组

var arr1=['a', 'b', 'c'];
console.log(arr1);//(3) ["a", "b", "c"]
var arr2=['d', 'e', 'f'];
console.log(arr2);//(3) ["d", "e", "f"]
var arr3=arr1.concat(arr2);//(6) ["a", "b", "c", "d", "e", "f"]
console.log(arr3);

2. toString

将数组转换成字符串

var arr=['a', 'b', 'c', 'd'];//a,b,c,d
var arr1=[1,2,3,4,5,6,7];//1,2,3,4,5,6,7
console.log(arr1.toString());

3. slice

这个方法可以传入参数,不传参数就是建立一个新的数组,把原数组的值复制过去。

传入参数的话就是slice(start,end),这里是包括开始位置的,不包括结束位置

var arr =['a', 'b', 'c', 'd', 'e', 'f'];
var arr1=arr.slice(1);
console.log(arr1);//(5) ["b", "c", "d", "e", "f"]

//也可以截取负值
var arr=['a', 'b', 'c', 'd', 'e', 'f'];
var arr1 =arr.slice(-3,5);
console.log(arr1);//(2) ["d", "e"]

4. join

以join里传入的参数为分隔符返回一个字符串

var arr =['a', 'b', 'c', 'd'];
var str1 =arr.join('&');
console.log(str1);//a&b&c&d

5. split

这个方法作用跟join作用相反,但是传入的参数必须是原字符串的分隔符才行,没有参数则每一个都会分隔开

//这个方法可以传入两个参数,第一个是分隔符第二个是限制的数量
var str1 = 'a-b-c-d-e';
var arr1 = str1.split('-');
var arr2 = str1.split('-', 3);
var arr3 = str1.split('');
var arr4 = str1.split();
console.log(arr1);
console.log(arr2);
console.log(arr3);
console.log(arr4);

二、类数组 

1. 简介

类似于数组的对象,但是它的原型是继承于对象,所以用不了数组原型上的方法

类数组要有下标以及length属性还有splice方法

 2. 添加数组原型的方法

继承数组原型的方法

var obj={
    '0':1,
    '1':2,
    '2':3,
    '3':4,
    '4':5,
    '5':6,
    '6':7,
    'length':6,
    'push':Array.prototype.push,
    'splice':Array.prototype.splice  //这个记住,
}
obj.push(7);
console.log(obj);
或者
Object.prototype.push=Array.prototype.push;
Object.prototype.splice=Array.prototype.splice;

3. push的原理

Array.prototype.push=function(elem){
    this[this.length]=elem;
    this.length ++;
}
//以数组长度作为键名,添加要添加的元素,然后长度再加一

练习题·

var obj={
    '2':3,
    '3':4,
    'length':2,
    'splice':Arrray.prototype.splice,
    'push':Array.prototype.splice
}
obj.push(1);
obj.push(2);
console.log(obj);



/* 
 * obj[2] = 1;
 * length = 3;
 * obj[3] = 2;
 * length = 4;
 * 根据原理可以这样分析
 */

 三、作业

1. 数组去重

Array.prototype.unique = function () {
  var temp = {},
      newArr = [];

      for (var i = 0; i < this.length; i++) {
        if (!temp.hasOwnProperty(this[i])) {
          temp[this[i]] = this[i];
          newArr.push(this[i]);
        }
      }
  return newArr;
}

var arr = [1, 1, 2, 2, 3, 4, 6, 3, 6, 'a', 'a'];
console.log(arr.unique());

2. 封装myTypeof

function myTypeof(val) {
  var type = typeof (val);
  var toStr = Object.prototype.toString;
  var res = {
    '[object Object]': 'object',
    '[object Number]': 'object-number',
    '[object String]': 'object-string',
    '[object Boolean]': 'object-boolean',
    '[object Array]': 'array'
  }
  if (val === null) {
    return 'null';
  } else if (type === 'object') {
    return res[toStr.call(val)];
  } else {
    return type;
  }
}

console.log(myTypeof(1));
console.log(myTypeof('s'));
console.log(myTypeof(true));
console.log(myTypeof([]));
console.log(myTypeof({}));
console.log(myTypeof(new Number(5)));
console.log(myTypeof(new String('ss')));
console.log(myTypeof(new Boolean(false)));
console.log(myTypeof(null));
console.log(myTypeof(undefined));
console.log(myTypeof(function () {}));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值