JavaScript 中的简单类型包括:
1.数字
2.字符串
3.布尔(true 和 false)
4.null
5.undefined
此外的其他类型均是对象(我们不要被 typeof 操作符的返回值所迷惑),例如:
1.函数
2.数组
3.正则表达式
4.对象(对象自然也是对象)
对象基础
在 JavaScript 中,对象是属性的集合(对象为关联数组),每个属性包括:
1.属性名,必须为字符串
2.属性值,可以为除了 undefined 之外的任何值
通过对象 literal 创建对象:
复制代码 代码如下:
// 通过对象 literal {} 创建空对象
var empty_object = {};
对象的属性名和属性值:
复制代码 代码如下:
var stooge = {
// "first-name" 为属性名,"Jerome" 为属性值
"first-name": "Jerome",
// "last-name" 为属性名,"Howard" 为属性值
"last-name": "Howard"
};
如果属性名是合法的标识符,那么可以省略引号:
复制代码 代码如下:
var flight = {
airline: "Oceanic",
number: 815,
departure: {
IATA: "SYD",
time: "2004-09-22 14:55",
city: "Sydney"
},
arrival: {
IATA: "LAX",
time: "2004-09-23 10:42",
city: "Los Angeles"
}
};
我们看一下属性访问的例子:
复制代码 代码如下:
var owner = { name: "Name5566" };
owner.name; // "Name5566"
owner["name"]; // "Name5566"
owner.job; // undefined
owner.job = "coder"; // 或者 owner["job"] = "coder";
如果属性名不是合法标识符,那么需要用引号包裹。不存在的属性值为 undefined。对象是通过引用而非按值传递:
复制代码 代码如下:
var x = {};
var owner = x;
owner.name = "Name5566";
x.name; // x.name === "Name5566"
这里 x 和 owner 引用同一个对象。
对象的属性可以使用 delete 操作符删除:
复制代码 代码如下:
delete obj.x; // 删除对象 obj 的 x 属性
对象的原型(prototype)
每一个对象都被链接了一个原型对象(prototype object),对象能够从原型对象中继承属性。我们通过对象 literal 创建一个对象,它的原型对象为 Object.prototype 对象(Object.prototype 对象本身没有原型对象)。我们在创建对象的时候,可以设置对象的原型对象(之后再讨论具体的设置方法)。在尝试获取(而非修改)对象的某个属性时,如果该对象不存在此属性,那么 JavaScript 会尝试从此对象的原型对象中获取此属性,如果原型对象中没有该属性,那么再从此原型对象的原型对象中查找,以此类推,直到 Object.prototype 原型对象。相比获取属性而言,我们修改对象的某个属性时,不会影响原型对象。
函数基础
在 JavaScript 中函数也是对象,其链接到 Function.prototype 原型对象(Function.prototype 链接到 Object.prototype)。函数存在一个名为 prototype 的属性,其值的类型为对象,此对象存在一个属性 constructor,constructor 的值为此函数:
复制代码 代码如下:
var f = function() {}
typeof f.prototype; // 'object'
typeof f.prototype.constructor; // 'function'
f === f.prototype.constructor; // true
函数是对象,你可以像使用对象一样使用函数,也就是说,函数可以保存在变量、数组中,可以作为参数传递给函数,函数内部可以定义函数。附带提及一下,函数有两个被隐藏的属性:
1.函数的上下文
2.函数的代码
函数的创建如下:
复制代码 代码如下:
var f = function add(a, b) {
return a + b;
}
console.log(f); // 输出 [Function: add]
关键字 function 后的函数名是可选的,我们制定函数名主要出于几个目的:
1.为了递归调用
2.被调试器、开发工具等用来标识函数
很多时候我们并不需要函数名,没有函数名的函数被叫做匿名函数。有括号包裹的为参数列表。JavaScript 不要求实参和形参匹配,例如:
复制代码 代码如下:
var add = function(a, b) {
return a + b;
}
add(1, 2, 3); // 实参和形参不匹配