JavaScript中的“严格模式”。
如果在脚本文件的第一行加入"use strict"; 则整个脚本都将以“严格模式”运行。如果语句不在第一行,则无效,整个脚本以“正常模式”运行。PS:只要"use strict"; 不跟在实际运行结果的语句后面,可以不在第一行。
如果"use strict"; 放在一个函数体的第一行,则整个函数以“严格模式”运行。
“严格模式”的意义
- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
- 消除代码运行的一些不安全之处,保证代码运行的安全;
- 提高编译器效率,增加运行速度;
- 为未来新版本的Javascript做好铺垫。
JavaScript中值被当作为假(false):
false;
null;
空字符串"";
数字 0;
数字 NaN;
其余都被当作真,包括true、字符串"false",以及其他对象。
for in语句中,应该在每次循环中,object的下一个属性名字符串被赋值给variable。
通常在使用过程中要检测object.hasOwnProperty(variable)来确定这个属性名是该对象的成员,还是来自于原型链。
for (myvar in obj) {
if (obj.hasOwnProperty(myvar)) {
...
}
}
对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符串。属性值可以是除 undefined 值以外的任何值。
JavaScript里的对象是无类型(class-free)的。它对新属性的名字和属性的值没有限制。对象适合用于汇集和管理数据。对象可以包含其他对象,所以它们可以容易地表示成树状或图形结构。
JavaScript包含一种原型链的特性,允许对象继承另一个对象的属性。正确地使用它能减少对象初始化时消耗的时间和内存。
对象字面量提供了一种非常方便的创建新对象值的表示法。一个对象字面量就是包围在一对花括号中的零或多个“名值”对。对象字面量可以出现在任何允许表达式出现的地方。
var empty_object = {};
var stooge = {
"first-name":"Jerome",
"last-name":"Howard"
};
属性名可以为"first-name",但不能为first-name ,但可以为first_name 。如果属性名是一个合法的JavaScript标识符且不是保留字,则不强求用引号括住属性名。
属性值可以嵌套。如:
var flight = {
airline:"aaaaa",
departure:{
IATA:"SYD"
}
};
获取对象里包含的值,可以用在对象后加[],且方括号中写属性名;如果属性名是一个字符串字面量,而且是个合法的JavaScript标识符且不是保留字,则也可以用 . 表示法表示。优先用 . 表达式。
stooge["first-name"] //"Jerome"
flight.departure.IATA //"SYD"
如果检索一个不存在的属性的值,则返回 undefined。
可以使用 || 运算符填充默认值。
var middle = stooge["middle-name"] || "(none)";
var status = flight.status || "unknown";
如果尝试从 undefined 的成员属性中取值将会导致 TypeError 异常。这时可以通过 && 运算符来避免错误。
flight.equipment // undefined
flight.equipment.model // throw "TypeError"
flight.equipment && flight.equipment.model // undefined
对象里的值可以通过赋值语句赋值,如果对象之前没有拥有那个属性名,那么该属性就被扩充到对象中。
对象的传递是通过引用来传递的,它们永远不会被复制。
var x = stooge;
var nick = stooge.nickname;
x.nickname = "Curly";
则 nick 也为"Curly"。