五、对象 Object
1、JavaScript 中的对象可以简单的理解成"名称-值"对,与其类似的类型
-
- Python 中的字典(Dictionary)
- Perl 和 Ruby 中的散列/哈希(Hash)
- C/C++ 中的散列表(Hash table)
- Java 中的散列映射表(HashMap)
- PHP 中的关联数组(Associative array)
“名称”部分是一个 JavaScript 字符串,“值”部分可以是任何 JavaScript 的数据类型——包括对象。
// 创建对象的两种方式 var obj = new Object(); var obj = {}; // 对象字面量法
2、对象的链式取值
obj.first.second; obj["first"]["second"];
这两种方法在语义上也是相同的。
第二种方法的优点在于属性的名称被看作一个字符串,这样的话,可以在[]中添加变量来进行取值。它也可以被用来访问某些以预留关键字作为名称的属性的值。
六、数组
常用的api
arr.toStirng() 返回一个字符串,包含数组中所有元素,逗号分割
arr.toLocalString() 根据宿主环境的区域设置,返回一个包含数组中所有元素的字符串,每个元素通过逗号分隔。
arr.concat(item1[, item2[, ... [, itemN]]]) 返回一个新的数组,包含arr和item中的所有元素
arr.join(sep) 返回一个包含数组中所有元素的字符串,每个元素通过指定的 sep 符号
分隔。
arr.pop() 删除并返回数组中最后一个元素, 会影响到原数组
arr.push(item1, ..., item) 将item1、item2....、itemN 追加到数组 arr 中, 会影响到原数组
arr.reverse() 数组逆序, 逆序数组中的每一个元素,元素内容不会改变,会影响原数组
arr.shift() 删除并返回数组第一个元素,会影响原数组
arr.slice() 返回子数组,以 a[start]
开头,以 a[end]
前一个元素结尾。
arr.sort([cmpfn]) 对数组进行排序,默认顺序是字符顺序。compfn是一个function(a, b),用来自定义排序。会影响原数组
a.splice(start, delcount[, item1[, ...[, itemN]]]) 从 start
开始,删除 delcount
个元素,然后插入所有的 item
。返回值是被删除的数组,该API会影响原数组
a.unshift(item1[, item2[, ...[, itemN]]]) 将 item
插入数组头部,返回数组新长度(考虑 undefined)
七、函数
1、函数的定义
* 用 function 定义函数
函数可以通过声明定义,也可以是一个表达式
// 函数声明 function sum(a, b) { return a+b; } sum(1,2) // 3 //函数表达式 var sum = function(a, b) { return a+b; } sum(1,4) // 5
* 用 Function 构造函数定义
var myFun = new Function("a", "b", "c", "return (a+b)*c") myFun(1,2,3); // 9
2、函数的调用
函数的调用方式主要这么4种:
1、作为一个函数调用
2、作为一个对象的方法进行调用
3、使用构造函数进行调用
4、使用函数方法进行调用 ( apply()、call() )
// 1、作为一个函数调用 function sum() { let a = arguments[0] let b = arguments[1] return a+b; } sum(1,6) // 7 // 2、作为一个对象的方法进行调用 var myObj = { firstName:"Hunter", lastName: "Liu", fullName: function () { return this.firstName + " " + this.lastName; } } myObj.fullName() // Hunter Liu // 3、使用构造函数进行调用 function fullNameF(arg1, arg2) { this.firstName = arg1; this.lastName = arg2; } // This creates a new object var x = new fullNameF("Hunter","Liu"); x.firstName; // HUnter // 4、使用函数方法进行调用 ( apply()、call() ) function myFunction(a, b) { return a * b; } myObject = myFunction.call(myObject, 10, 2); // 20 myObject = myFunction.apply(myObject,[10, 2]); // 20
apply() 和 call() 的
共同点:是第一个参数都是对象本身,因为需要获取第一个参数的作用域,也就是让第一个参数作为函数调用方法的 this
不同点:apply() 的第二个参数是一个数组,也就是将被调用函数的所有的参数都放在这个数组中,传入函数。
call() 的参数则是依次填入的,从第二个参数开始就是被调用函数的参数。