一.JavaScript对象
在 JavaScript 中,几乎“所有事物”都是对象。
- 布尔是对象(如果用 new 关键词定义)
- 数字是对象(如果用 new 关键词定义)
- 字符串是对象(如果用 new 关键词定义)
- 日期永远都是对象
- 算术永远都是对象
- 正则表达式永远都是对象
- 数组永远都是对象
- 函数永远都是对象
- 对象永远都是对象
所有 JavaScript 值,除了原始值,都是对象。 原始值指的是没有属性或方法的值。
二.JavaScript 对象属性
添加新属性
1
2
// person 对象已存在 - 那么您可以为其添加新属性:
person.属性名 = 属性值;
删除属性
1
2
3
// delete 关键词从对象中删除属性:
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
delete person.age; // 或 delete person["age"];
delete 关键词会同时删除属性的值和属性本身。
三.对象方法
添加新方法
1
2
// person 对象已存在 - 那么您可以为其添加新方法:
person.属性名 = function() {};
这个方式同增加对象属性
四.JavaScript 函数定义
避免使用new
,即通过名为 Function()
的内建函数构造器来定义。
1
2
var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
函数提升
Hoisting 是 JavaScript 将声明移动到当前作用域顶端的默认行为。Hoisting 应用于变量声明和函数声明。正因如此,JavaScript 函数能够在声明之前被调用:
1
2
3
4
5
myFunction(5);
function myFunction(y) {
return y * y;
}
注意:使用表达式定义的函数不会被提升,如var x = function(){...}
。
箭头函数
1
2
3
4
5
6
7
8
// ES5
var x = function(x, y) {
return x * y;
}
// ES6
const x = (x, y) => x * y;
// 使用 const 比使用 var 更安全,因为函数表达式始终是常量值。
参数默认
如果调用参数时省略了参数(少于被声明的数量),则丢失的值被设置为:undefined。
1
2
3
4
5
6
// 有时这是可以接受的,但是有时最好给参数指定默认值:
function myFunction(x, y) {
if (y === undefined) {
y = 0; //如果没有接收到y的值,则赋值0
}
}
arguments
对象包含函数调用时使用的参数数组。
重点
JavaScript 参数通过值传递:函数只知道值,而不是参数的位置。但当参数是对象,数组时,则是引用传递,会改变函数外对象的值。
可以参考——《JavaScript对象参数的引用传递》
五.This
被称为 this 的事物,是“拥有”这段 JavaScript 代码的对象。
1
2
3
4
5
6
7
8
9
// 在此例中,this 的值是 myObject。
var myObject = {
firstName:"John",
lastName: "Doe",
fullName: function () {
return this;
}
}
myObject.fullName(); // 将返回 [object Object](拥有者对象)