javascript 学习(2)
1.表达式
1.1原始表达式:包括常亮或直接量,关键字和变量。其中直接量是直接在表达式中出现的常量。
1.2对象和数组的初始化表达式:他们不是原始表达式,因为他们所包含的成员或元素都是子表达式。
注:对于var arr = [,];在ie下数组长度为2,火狐和谷歌浏览器下长度为1,最后一个逗号后的创建新的undefined元素。
1.3 函数定义表达式
1.4属性访问表达式:得到的是一个对象属性或数组元素值,访问方式为 e.属性名称 或e[索引];如果访问结果为null或undefined,则抛出错误;如果属性名称是一个保留字或包含空格和标点符号或一个数字则必须使用方括号的写法。
1.5调用表达式 是一种调用(或执行)函数或方法的语法表示。它以一个函数表达式开始,这个函数表达式指要调用的函数,例 fn(0);
1.6 对象创建表达式 创建一个对象并调用一个函数(这个函数称为构造函数)
2.运算符
2.1 算数表达式
2.2 逻辑表达式
2.3 赋值表达式
优先级排序
在javascript中所有数字的类型都是浮点型,除法结果也是浮点型,同时 0/0 为NaN。
求余运算的结果通常为整型,但也适用于浮点数
2.4 关于“+”运算符:
(1)如果其中一个操作符是对象,则对象会遵循对象到原始值得转换规则转换为原始类值;
(2)在进行对象到原始值得转换后,如果其中一个操作数是字符串的话,另一个操作也可换成字符串,然后进行字符串连接。否则两者都会转换成数字或NaN,然后进行加法。
2.5 in运算:左边操作数是一个字符串或可以转换为字符串,右操作数是一个对象。如果右侧的对象拥有一个名为左操作数的值的属性,则返回true。
2.6 instanceof 左边操作符为一个对象,有操作数标识对象的类。如果左侧的对象是右侧类的实例则返回true;
2.7 eval() 如果一个函数调用了eval(),那么解析器无法对这个函数做进一步的优化。而将eval()定义为函数的另一个问题是他可以被赋予其他名字。
其只有一个参数,如果传入的不是字符串,他直接返回这个参数。如果是字符串则当成javascript进行编译,如果编译错误则报错,如果正确返回值,入没有值返回undefined。它查找变量的值和定义的新变量和函数的操作和局部变量中完全一样。直接调用eval()时,他总是在调用它的上下文作用域内执行,其他调用为则使用全局对象作为其上下文作用域,并且无法读、写、定义局部变量和函数。eval()允许我们执行那些对上下文没有任何依赖的全局脚本代码段。
注:ie定义了一个名叫ExecScript()全局函数来完成eval的功能。
2.8 typeof 返回值为操作值对象的的一个字符串
2.9 delete 用来删除对象属性或数组元素,但不能返回值;注:用户用var语句声明的不能被删除同样,通过function定义的函数和函数参数不能被删除。
例:
var ob ={x:1,y:2};
delete ob.x;
x in ob //false,x已经被删除不存在于ob内
2.10 void 出现在操作数之前操作数可以为任意类型,操作数会照常计算,但忽略结果并返回undefined