JS引用类型

Object

表示方法

  • new 操作符后跟 Object 构造函数

    var person = new Object();

  • 使用对象字面量表示法

    var person = { name : "Nicholas", age : 29 };


访问方式

alert(person["name"]); //"Nicholas" 

alert(person.name); //"Nicholas" 



Array

表示形式

  • var colors = new Array(20);
  • var colors = new Array("red", "blue", "green");
  • var colors = ["red", "blue", "green"];

检查数组

  • if (value instanceof Array){ //对数组执行某些操作 }
  • Array.isArray()方法
  • Object.prototype.tostring.call(this)

转换方法

  • alert(colors.toString()); // red,blue,green
  • alert(colors.valueOf()); // red,blue,green
  • alert(colors); // red,blue,green

join()

var colors = ["red", "green", "blue"]; 
alert(colors.join(",")); //red,green,blue 
alert(colors.join("||")); //red||green||blue 

pop() push() shift() unshift()

var colors = new Array(); //创建一个数组
var count = colors.unshift("red", "green");
count = colors.unshift("black"); 

//数组中各项的顺序为"black"、"red"、"green"。


重排序方法

reverse()会反转数组项的顺序

var values = [1, 2, 3, 4, 5]; 
values.reverse(); 
alert(values); //5,4,3,2,1

sort()

sort()方法会调用每个数组项的 toString()转型方法,然后比较得到的字符串,以 确定如何排序。

var values = [0, 1, 5, 10, 15]; 
values.sort(); 
alert(values); //0,1,10,15,5 

改造

var values = [0, 1, 5, 10, 15]; 
values.sort((a,b)=>{
    return a-b
}); 
alert(values); //0,1,5,10,15 

操作方法

concat()

这个方法会先创建当前数组一个副本,然后将接收到的参数 添加到这个副本的末尾,最后返回新构建的数组。

var colors = ["red", "green", "blue"]; 
var colors2 = colors.concat("yellow", ["black", "brown"]); 

alert(colors); //red,green,blue 
alert(colors2); //red,green,blue,yellow,black,brown 

splice()

splice()方法始终都会返回一个数组,该数组中包含从原始数组中删除的项

  • 第一参数是开始位置
  • 第二个参数是删除项
  • 第三个参数是从开始位置往后插入项
var colors = ["red", "green", "blue"];

colors.splice(1, 1, "red", "purple"); 

alert(colors); // red,red,purple,blue 


位置方法

indexOf() lastIndexOf()

indexOf()查找到第一个符合的返回index,未找到为-1

lastIndexOf()查找到最后一个符合的返回index,未找到为-1

第一个参数为查找对象 第二个参数为开始位置


迭代方法

  • every():对数组中的每一项运行给定函数,如果该函数对每一项都返回 true,则返回 true。
  • filter():对数组中的每一项运行给定函数,返回该函数会返回 true 的项组成的数组。
  • forEach():对数组中的每一项运行给定函数。这个方法没有返回值
  • map():对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组。
  • some():对数组中的每一项运行给定函数,如果该函数对任一项返回 true,则返回 true

map()

var numbers = [1,2,3,4,5,4,3,2,1]; 
var mapResult = numbers.map(function(item, index, array){ 
 return item * 2; 
}); 
alert(mapResult); //[2,4,6,8,10,8,6,4,2] 

归并方法

reduce() redunceRight()

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

var values = [1,2,3,4,5]; 
var sum = values.reduce(function(prev, cur, index, array){ 
 return prev + cur; 
}); 
alert(sum); //15 

Date类型

创建

var now = new Date();

// 本地时间 2000 年 1 月 1 日午夜零时
var y2k = new Date(2000, 0); 

Date.parse()接收一个表示日期的字符串参数,然后尝试根据这个字符串返回相应日 期的毫秒数

Date 类型的 toLocaleString()方法会按照与浏览器 设置的地区相适应的格式返回日期和时间

!


Function

无重载

一个函数可以作为另一个函数的参数传递

函数内部属性argumentsthis

arguments 的主要用途是保存函数参数

这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。


函数内部属性

这个对象还有一个名叫 callee 的属性,该属性是一个指针,指向拥有这个 arguments 对象的函数。

window.color = "red"; 
var o = { color: "blue" }; 
function sayColor(){ 
 alert(this.color); 
} 
sayColor(); //"red" 
o.sayColor = sayColor; 
o.sayColor(); //"blue" 

函数属性和方法

每个函数都包含两个 属性:length 和 prototype

length 属性表示函数希望接收的命名参数的个数

prototype 属性是不可枚举的,因此使用 for-in 无法发现


每个函数都包含两个非继承而来的方法:apply()和 call()。

apply()方法接收两个参数:一个 是在其中运行函数的作用域,另一个是参数数组

call()第一个参数是 this 值,其余参数都直接传递给函数

真正强大的地方是能够扩充函数 赖以运行的作用域

window.color = "red"; 
var o = { color: "blue" }; 
function sayColor(){ 
 alert(this.color); 
} 
sayColor(); //red 
sayColor.call(this); //red 
sayColor.call(window); //red 
sayColor.call(o); //blue