读书人

Javascript 您不知道的事

发布时间: 2012-11-23 00:03:43 作者: rapoo

Javascript 你不知道的事

  1. NaN表示一个不能产生正常结果的运算结果。它不等于任何值,包括它自己。可以用isNaN(number)来检测。
  2. 同Java中的字符串一样,JS中的字符串是不可变的。也就是说一旦字符串被创建,就无法改变。下标表达式(如s[3],代替s.charAt(3))可以读取字符,但是不能用于改变字符。
  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。
  4. 不同于C/C++、Java等语言,JavaScript的switch语句不光可以使用数字、字符做条件表达式,还可以使用字符串!其实JavaScript中没有字符这个基本类型,单个的字符也是一个字符串。更强大的是,case语句的表达式可以是变量!下面是示例:
    相应的第一次替换中,arguments的内容为:
    Arguments[5]
    1. 0"30n"
    2. 1"30"
    3. 2"n"
    4. 34
    5. 4"fon230nva09dnfadsf"
    exec方法的返回结果是一个JS数组,并附带两个额外的属性index和input。与上面replace对应的exec方法第一次执行的返回结果对照如下:
    Array[3]
    1. 0: "30n"
    2. 1: "30"
    3. 2: "n"
    4. index: 4
    5. input: "fon230nva09dnfadsf"
    6. length: 3
    string的match方法根据g标识来决定如何进行匹配。如果没有g标识,那么调用string.match(regexp)的结果与第一次调用regexp.exec(string)的结果相同。如果regexp带有g标识,那么它返回一个包含所有匹配的字符串的数组。
    输出结果:Array[3]
    1. 0: "30n"
    2. 1: "30"
    3. 2: "n"
    4. index: 4
    5. input: "fon230nva09dnfadsf"
    6. length: 3
    输出结果:Array[2]
    1. 0: "30n"
    2. 1: "09d"
    3. length: 2
    string的split(separator,limit)方法把string分割成片段,来创建一个字符串数组。可选参数limit可以限制被分割的片段数量。separator参数可以是一个字符串或一个正则表达式,并且来自分组捕获的文本将会被包含在被分割后的数组中。下面给出一个综合的例子:
    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。

读书人网 >JavaScript

热点推荐