变量
1. 如果没有用var语句给一个变量定初始值,它的初始值就是undefined.
2. 尝试给未用var声明的变量赋值,JavaScript会隐式声明该变量。但是,隐式声明的变量总是被创建为全局变量,即使该变量只在一个函数体内使用。
3. 函数中声明的变量,无论在哪里声明的,在整个函数中都有定义。
4. 变量保存了基本类型的实际值,但是对引用类型的值却只保存对他的引用。
表达式和运算符
1. JavaScript中所有数字都是浮点型的。
2. = = =运算符是等同运算符,它采用严格的统一定义检测两个运算数是否完全相同。= = 运算符是相等运算符,它采取比较宽松的统一性定义。
3. NaN永远不会和其他任何值相等,包括它本身。
4. 比较对象、数组和函数时使用的原则是引用,只有两个变量引用的是同一个对象时,他们才是相等的。
5. 如果一个值是null,另一个值是undefined,它们相等。
6. 字符串的比较是严格按照逐个字符进行比较,采用的是每个字符在Unicode编码集中的数值。
7. 运算符+比较特殊,如果该运算符的一个运算数是字符串,那么另一个运算数将被转换为字符串。当+用于字符串和数字时,并不一定具有结合性:
s = 1 + 2 + “blind mice”; // 生成 “3 blind mice”
t = “blind mice” + 1 + 2; // 生成 “ blind mice12”
由于+运算符是从左到右运算的
语句
1. for/in 可以用来遍历对象的属性,如:
for(variable in object) statement;
2. throw语句
if(x<0) throw new Error(“x must not be negative”);
3. try从句可以在没有catch的情况下和finally一起使用
4. with语句
with(frames[0].document.forms[0]){
name.value=””;
address.value=””;
email.value=””;
}
省略每次前面都写frames[0].document.forms[0]
函数
1. Arguments对象还定义了callee属性,用来引用当前正在执行的函数。
function(x){
if(x <= 1) return 1;
return x * arguments.callee(x-1);
}
2. prototype属性
每个函数都有一个prototype属性,他引用的是与定义的原型对象。原型对象在使用new运算符把函数作为构造函数时起作用,它在定义新的对象类型时起着非常重要的作用。
3. 方法apply()和call()
使用这两个方法可以像调用其他对象的方法一样调用函数。call()和apply()的第一个参数都是要调用的函数的对象。call剩余的参数是传递给要调用的函数的值。例如,要把两个数字传递给函数f(),并作为对象o的方法调用:
f.call(o,3,2);
对象
1. 一个对象的原型是由创建并初始化该对象的构造函数定义的,原型对象初始化时是空的,但是你在其中定义的任何属性都会被该构造函数创建的所有对象继承。
2. valueof()方法,当JavaScript需要将一个对象转换成字符串之外的原始类型时,就需要调用它。
数组
1. 数组的方法
join()方法;
var a = [1,2,3];
var s = a.join(“,”); //s = = “1,2,3”
reverse();
sort();不传递给它参数,那么它就按照字母的顺序进行排序,如果要将数组按照别的顺序来排序,必须将一个比较函数作为参数传递给sort();
再谈Function
构造函数Function()允许在运行时动态地创建和编译JavaScript代码,比较下面两组代码的运行结果:
1)
var x = “global”;
function f(){
var x = “local”;
function g(){return x;}
g();
}
f(); //调用该函数,显示“local”。
2)
var x = “global”;
function f(){
var x = “local”;
return new Function(“return x”);
}
alert(f()); //显示“global”;