- 解构。解构赋值语法是一个能从数组或者对象对应的数据结构或者对象字面量中提取数据的JS表达式。
var foo = ["one", "two", "three"];// 不使用解构var one = foo[0];var two = foo[1];var three = foo[2];// 使用解构var [one, two, three] = foo;
- 短路求值。 False&& Anything= False,True|| Anything= True
- 删除数组的元素的时候,数组的长度是不变的。比如删除了A[8],A[8]仍然存在,变成了 Undefined。 Delete删除数组的一个元素时,这个数组就不在数组中了。但元素仍然可寻址并返回 Undefined。
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");delete trees[3];if (3 in trees) {// 不会被执行}
Delete操作成功,元素或者属性会变成 Undefined。 Delete可以删除各种隐式声明,但是被 Var声明的除外。
如果想让数组存在一个元素但是 Undefined值,使用 Undefined关键字而不是 Delete操作, Tree[3]分配一个 Undefined,但是这个数组元素仍然存在。
var trees = new Array("redwood", "bay", "cedar", "oak", "maple");trees[3] = undefined;if (3 in trees) {// this gets executed(会被执行)}
- typeof操作符 可通过下面2种方式使用:
typeof operandtypeof (operand)
typeof 操作符返回一个表示 operand 类型的字符串值。operand 可为字符串、变量、关键词或对象,其类型将被返回。operand 两侧的括号为可选。
In操作符,如果所指定的属性确实存在于所指定的对象中,则会返回 True,语法如下:
propNameOrNumber in objectName
在这里 ProNameOrNumber是一个代表着属性名的字符串或者是一个代表着数组索引的数值表达式,而 ObjectName是一个对象名。
- Instanceof如果所判别的对象确实是所指定的类型,则返回true。其语法如下:
objectName instanceof objectType
ObjectName是需要做判别的对象的名称,而 ObjectType是假定的对象的类型, 例如 Date或者 Array.
当你需要确认一个对象在运行时的类型时,可使用 Instanceof 。例如,需要 catch 异常时,你可以针对抛出异常的类型,来做不同的异常处理。
例如, 使用 Instanceof去判断 TheDay是否是一个 Date对象. 因为 TheDay是一个 Date对象, 所以 If中的代码会执行.
var theDay = new Date(1995, 12, 17);if (theDay instanceof Date) {// statements to execute}
Instanceof 如果所判别的对象确实是所指定的类型,则返回True。其语法如下:
objectName instanceof objectType
ObjectName是需要做判别的对象的名称,而objectType是假定的对象的类型, 例如 Date或 Array.
当你需要确认一个对象在运行时的类型时,可使用 Intanceof 例如,需要 catch 异常时,你可以针对抛出异常的类型,来做不同的异常处理。
例如, 下面的代码使用 Intanceof去判断 TheDay是否是一个 Date对象. 因为 TheDay是一个 Date对象, 所以if中的代码会执行.var theDay = new Date(1995, 12, 17);if (theDay instanceof Date) {// statements to execute}
表达式 Edit 节
表达式是一组代码的集合,它返回一个值。(译注:定义比较不好理解,看下面的举例就很好懂了。)
每一个合法的表达式都能计算成某个值,但从概念上讲,有两种类型的表达式:有副作用的(比如赋值)和单纯计算求值的。
表达式x=7是第一类型的一个例子。该表达式使用=运算符将值7赋予变量x。这个表达式自己的值等于7。
代码3 + 4是第二个表达式类型的一个例子。该表达式使用+运算符把3和4加到一起但并没有把结果(7)赋值给一个变量。
JavaScript有以下表达式类型:
算数: 得出一个数字, 例如 3.14159. (通常使用 arithmetic operators.)
字符串: 得出一个字符串, 例如, “Fred” 或 “234”. (通常使用 string operators.)
逻辑值: 得出true或者false. (经常涉及到 logical operators.)
基本表达式: javascript中基本的关键字和一般表达式。
左值表达式: 分配给左值。
-
This关键字被用于指代当前的对象,通常,This指代的是方法中正在被调用的对象。用法如下:
this["propertyName"]this.propertyName
假设一个用于验证对象 Value属性的 Validate函数,传参有对象,最高值和最低值。
function validate(obj, lowval, hival){if ((obj.value < lowval) || (obj.value > hival))console.log("Invalid Value!");}
你可以在任何表单元素的 Onchange事件处理中调用 Validate函数,用 This来指代当前的表单元素,用例如下:
<p>Enter a number between 18 and 99:</p><input type="text" name="age" size=3 onChange="validate(this, 18, 99);">
object和map。objects会被用于将字符串类型映射到数值。Object允许设置键值对、根据键获取值、删除键、检测某个键是否存在。而Map具有更多的优势。
Object的键均为Strings类型,在Map里键可以是任意类型。
必须手动计算Object的尺寸,但是可以很容易地获取使用Map的尺寸。Map的遍历遵循元素的插入顺序。
Object有原型,所以映射中有一些缺省的键。(可以用 map = Object.create(null) 回避)。
这三条提示可以帮你决定用Map还是Object:
如果键在运行时才能知道,或者所有的键类型相同,所有的值类型相同,那就使用Map。
如果需要将原始值存储为键,则使用Map,因为Object将每个键视为字符串,不管它是一个数字值、布尔值还是任何其他原始值。
如果需要对个别元素进行操作,使用Object。
Map的键和Set的值的等值判断都基于same-value-zero algorithm:
判断使用与===相似的规则。
-0和+0相等。
NaN与自身相等(与===有所不同)。
