JavaScript 引用类型<持续更新中

1.Object类型

创建Object实例的两种方式:

  1. 使用new操作符后跟Object构造函数;

  2. 对象字面量

    使用对象字面量语法时,如果留空其花括号,则可以定义只包含默认属性和方法的对象

    其中 var person = {};new Object()相同

    关于对象字面量语法,推荐只在考虑对象属性名的可读性时使用。

访问对象的语法:

  • 点表示法
  • 方括号语法

除非必须使用变量来访问属性,否则建议使用点表示法。

2. Array类型

在使用 Array 构造函数时可以省略 new 操作符

数组最多可以包含4 294 967 295 个项

检测数组:
if (value instanceof Array){
 //对数组执行某些操作
}

instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的 Array 构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。

为了解决这个问题,ECMAScript 5 新增了 Array.isArray()方法。这个方法的目的是最终确定某 个值到底是不是数组,而不管它是在哪个全局执行环境中创建的。

if (Array.isArray(value)){
 //对数组执行某些操作
} 

如果数组中的某一项的值是 null 或者 undefined,该值在 join()、 toLocaleString()、toString()和 valueOf()方法返回的结果中以空字符串表示。

栈方法:

栈是一种 LIFO(Last-In-First-Out, 后进先出)的数据结构,最新添加的项最早被移除。

push()、pop()

队列方法:

队列数据结构的访问规则是 FIFO(First-In-First-Out, 先进先出)。

综合使用shift()、push

unshift()与 shift()的用途相反: 它能在数组前端添加任意个项并返回新数组的长度。同时使用 unshift()和 pop()方法,从相反的方向来模拟队列,即在数组的前端添加项,从数组末端移除项

重排序方法:

reverse()和 sort()

sort()方法按升序排列数组项——即最小的值位于最前面,最大的值排在最后面。 为了实现排序,sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以确定如何排序。即使数组中的每一项都是数值,sort()方法比较的也是字符串

reverse()和 sort()方法的返回值是经过排序之后的数组。

另:

var arr = [];
// 降序
arr.sort((a, b) => {
    return b - a;
});
// 升序
arr.sort((a, b) => {
    return a - b;
});
操作方法:

concat()、slice()

slice: 原始数组不会被改变

如果 slice()方法的参数中有一个负数,则用数组长度加上该数来确定相应的位置。例如,在一个包含 5 项的数组上调用 slice(-2,-1)与调用 slice(3,4)得到的 结果相同。如果结束位置小于起始位置,则返回空数组。

splice(): *该方法会改变原始数组。*如果从 arrayObject 中删除了元素,则返回的是含有被删除的元素的数组。

删除、插入、替换

位置方法:

indexOf()、lastIndexOf()

使用严格相等“===”匹配

迭代方法:

every()、filter()、forEach()、map()、some()

归并方法:

reduce()和 reduceRight()

reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。

扩列:

  1. 数组里所有值的和
var total = [ 0, 1, 2, 3 ].reduce(
  ( acc, cur ) => acc + cur,
  0
);

​ 2.累加对象数组里的值

var initialValue = 0;
var sum = [{x: 1}, {x:2}, {x:3}].reduce(
    (accumulator, currentValue) => accumulator + currentValue.x
    ,initialValue
);

console.log(sum) // logs 6

​ 3.将二维数组转化为一维

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
 ( acc, cur ) => acc.concat(cur),
 []
);

​ 4.计算数组中每个元素出现的次数

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];

var countedNames = names.reduce(function (allNames, name) { 
  if (name in allNames) {
    allNames[name]++;
  }
  else {
    allNames[name] = 1;
  }
  return allNames;
}, {});
// countedNames is:
// { 'Alice': 2, 'Bob': 1, 'Tiff': 1, 'Bruce': 1 }

5.数组去重

let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
let result = arr.sort().reduce((init, current) => {
    if(init.length === 0 || init[init.length-1] !== current) {
        init.push(current);
    }
    return init;
}, []);
console.log(result); //[1,2,3,4,5]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Calmness_7

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值