Javascript 你不知道的事
- NaN表示一个不能产生正常结果的运算结果。它不等于任何值,包括它自己。可以用isNaN(number)来检测。
- 同Java中的字符串一样,JS中的字符串是不可变的。也就是说一旦字符串被创建,就无法改变。下标表达式(如s[3],代替s.charAt(3))可以读取字符,但是不能用于改变字符。
- null,undefined,空字符串'',0,NaN被当做false,其余的值(包括"false")或对象都被当做true。所谓的“被当做”并不是说这些值就是布尔值true,例如true=="false"并不成立,而是在条件判断语句如if("false")alert('"false" judge as true');中被当做是true。之所以出现这样的情况,是因为非空的字符串或者非null的对象相当于!undefined或!null,其值被当做true也就是很自然的了。我们可以用两个取非的符号“!”将一个值强制转换为布尔类型,对其真假进行直观的查看,例如alert(!!"false");输出true。
- 不同于C/C++、Java等语言,JavaScript的switch语句不光可以使用数字、字符做条件表达式,还可以使用字符串!其实JavaScript中没有字符这个基本类型,单个的字符也是一个字符串。更强大的是,case语句的表达式可以是变量!下面是示例:
相应的第一次替换中,arguments的内容为:
Arguments[5]- 0"30n"
- 1"30"
- 2"n"
- 34
- 4"fon230nva09dnfadsf"
Array[3]- 0: "30n"
- 1: "30"
- 2: "n"
- index: 4
- input: "fon230nva09dnfadsf"
- length: 3
输出结果:Array[3]
- 0: "30n"
- 1: "30"
- 2: "n"
- index: 4
- input: "fon230nva09dnfadsf"
- length: 3
- 0: "30n"
- 1: "09d"
- length: 2
var x=10;var foo = { x:20, bar:function(){ var x = 30; return this.x; }}var a = (foo.bar)();//括号不影响表达式的值,相当于直接调用foo.bar()var b = (foo.bar=foo.bar)();//括号表达式返回赋值操作的结果,也就是foo的成员bar函数;而调用的时候已经回到了全局作用域。var c = (foo.bar,foo.bar)();//与上式相同,都是返回表达式的结果,也就是后面的bar函数,同样相当于在全局作用域调用bar函数。
因此a、b、c的值分别为20,10,10。