一段开头:
1:引用类型的值(对象)是引用类型的一个实例。引用类型是一种数据结构,用于将数据和功能组织在一起。他也常常被称为类,但这种称呼并不妥当,尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,引用类型有时也被称为对象定义,因为他描述的时一类对象所具有的属性和方法:;
2:如前所述对象是某个特定引用类型的实例。新对象是使用 new 操作符后跟一个构造函数来创建的。构造函数本身就是一个函数,只不过该函数是出于创建新对象的目的而定义的。请看下面这行代码:
var person = new Object();
这行代码创建了 Object 引用类型的一个新实例,然后把该实例保存在了变量 person 中。使用的构造函数是 Object,它只为新对象定义了默认的属性和方法。ECMAScript 提供了很多原生引用类型(例如 Object),以便开发人员用以实现常见的计算任务;
Object类型
1:目前我们看到的大多数引用类型值都是Object类型的实例;
2:创建Object实例的两种方式
- new 操作符
var person = new Object();
person.name = "Nicholas";
person.age = "25";
- 对象字面量表示法
var person = {
name:"juan", //属性名也可以用字符串表示如"name"
age:25
}
3:访问对象属性两种方式
- person.name;
- person[“first name”]; //必须用变量访问属性时使用
Set类型
1:类似于数组,但是成员唯一
const s = new Set();
[1,2,3,4,5,5,5].forEach(x=> s.add(x));
for(let i of s){
console.log(i);
}//1,2,3,4,5
//例一
const items = new Set([1,2,3,4,5,5,5]);
[...items]; //1,2,3,4,5
items.size; //5
items.length; //undefined??为啥是undefined
//例二
const items2 = new Set(document.querySelectorAll("li"))
Array类型
1:ECMAScript数组的每一项可以是任何类型的数据;
2:ECMAScript数组的大小是可以动态调整的,随数据的添加自动增长以容纳新增数据;
3:创建数组两种方式
- Array构造函数
var colors = new Array();
//new可省略var colors = new Array("pink","red");
var colors = new Array(20);
var colors = Array();
- 数组字面量表示法
var numbers = [1,2,3,4]; //可以不赋值
4:Array的length属性可修改,没有值的位置是undefined;
5:检测某对象是否为数组两种方式
- 方法一:instanceof方法
names instanceof Array; //true(局限性:instanceof操作符认为页面只有一个全局执行环境,所以若页面有框架不适用)
- 方法二:isArray()函数
Array.isArray(names); //局限性:低版本浏览器不支持
- 兼容性方案
6:所有对象都有toLocaleString(),toString(),valueOf()方法;
7:调用数组**toString()**方法:返回数组中每个值的字符串形式拼接而成的一个以逗号分割的字符串;(实际上创建这个字符串会调用数组每一项的toString()方法)
8:调用数组valueOf() 方法:返回的还是数组;
9:调用数组toLocalString() 方法:返回值与toString()相同(但是实际上创建这个字符串会调用数组每一项的toLocalString()方法);
10:调用数组的join(“指定分隔符”)方法:返回数组中每个值的字符串形式拼接而成的一个以指定分隔符分割的字符串;
11:两个栈方法
colors.pop(); //删除数组最后一个元素,返回被删除元素
colors.push("green",5); //在数组末尾添加"green",5,返回新数组长度
12:两个队列方法
colors.shift(); //删除数组第一个元素,返回被删除元素
colors.unshift("yellow","blue"); //在数组首部添加元素"yellow","blue",并返回新数组长度
13:两个数组重排序方法
numbers.reverse(); //返回[4,3,2,1]
numbers.sort(); //可接收一个比较函数,返回排序后数组
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1;
} else {
return 0;
}
}
var values = [10,5, 15];
values.sort(compare);
console.log(values);//[2,10,15]
14: concat()方法
- concat()可以基于当前数组中所有项创建一个新数组;
- 若传递给 concat()方法的是一或多个数组,则该方法会将这些数组中的每一项都添加到结果数组中;
- 若传递的值不是数组,这些值就会被简单地添加到结果数组的末尾;
var colors = ["red","green"];
var numbers = [5,2];
var colors2 = colors.concat(); //返回colors副本
var colors3 = colors.concat("red"); //["red", "green", "red"]
var colors4 = colors.concat(numbers); //["red", "green", 5, 2]
15:slice()方法
- 基于当前数组中的一或多个项创建一个新数组,不影响原数组;
- 接受一个或两个参数:返回项的开始和结束位置;
var colors = ["red","green"];
var colors2 = colors.slice(0); //["red","green"]
var colors3 = colors.slice(1,1); //["green"]
var colors4 = colors.slice(-2,1); //["red"]
16:splice()
- 向数组指定位置添加或删除项
colors.splice(2,2,"red","green"); //会从当前数组的位置 2 开始删除两项,插入字符串"red"和"green"
17:位置方法
colors.indexOf("red",0); //在colors数组中从索引0开始查找元素"red",并返回其索引位置
colors.lastIndexOf("red",5); //在colors数组中从索引5开始向前查找元素"red",并返回其索引位置
18:数组的5个迭代方法
- every():对数组中的每一项运行给定函数,每项都true返回true,用于查询数组中的项是否满足某个条件;
var colors = [1,2,3,4,5,6];
var result = colors.every(function(item,index,array){
return (item>0);
})
console.log(result); //true
- some():对数组中的每一项运行给定函数,一项为true即返回true,用于查询数组中的项是否满足某个条件;
var