1. 数组初始化可以跳着来 var s = [1,2,,,,6]; // 中间省略的元素为undefined
2. 函数定义表达式: var f = function(args){ return 0;}; 得到的 f 是一个函数直接量而不是函数的返回值.
3. 访问对象的属性可以使用 . 和 [ ] , 但是只有后者可以放入一个表达式进行计算.
4. 运算符 in , instanceof 和 delete
- in : 做操作数是一个字符串(或可转换为字符串的值), 右操作数是一个对象, 如果右侧对象拥有一个名为左操作数值的属性名, 那么表达式返回true.
- instanceof: 左操作数是一个对象, 右操作数标识对象的类, 如果左侧对象是右侧类的实例, 则表达式返回true.
- delete: 用来删除对象属性或者数组的元素, 无返回值.
var point = {x:1,y:1}; console.log("x" in point); console.log("z" in point); console.log("toString" in point); // 继承来的 var data = [10,13,12,4]; //数组也是对象 console.log("0" in data); //有索引为0 console.log(1 in data); //有索引为1 console.log(4 in data); //没有索引为4 var d = new Date(); console.log(d instanceof Date); console.log(d instanceof Object); console.log(d instanceof Number); //false var obj = {x:1,y:2}; delete obj.x; console.log("x" in obj); //"false" obj.y = undefined; console.log("y" in obj);//"true", 使用undefined赋值后属性仍然在对象中存在 var array = [1,2,3]; delete array[1]; console.log(1 in array); //"false" console.log(array[1]);//"undefined",访问删除的属性返回 undefined
5. void运算符, 常用在 <a href="javascript:void window.open();"> , 是一个一元运算符, 出现在操作数之前, 操作数可以返回任意类型, 操作数会照常计算, 但忽略计算结果并返回undefined.
6. 函数的声明提前.
- 函数定义语句中的函数被显式地提前到来脚本或者函数的顶部(嵌套函数提前的外层函数的顶部), 因此他们在整个脚本和函数内是可见的, 如果使用var的话, 只有变量声明提前了, 而变量的初始化代码仍然在原来的位置, 而使用函数声明语句后, 函数的名称和函数体均提前了.
- 如果函数中用到全局变量, 但是这个变量又在函数定义之后会出现什么情况呢? -- 还是能正常引用, 因为函数体并没有执行.
7. with语句
- with语句: with(object) statement; 将object添加到作用域链的头部,然后执行statement, 最后把作用域链恢复.在严格模式中是禁止使用with语句的, 非严格模式也不推荐使用,因为难于优化.
with(document.forms[0]){ //使得可以直接访问表单,下面的name等都是表单的属性 name.value = ""; address.value = ""; email.value = ""; }