日期:2014-05-16  浏览次数:20346 次

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语句的表达式可以是变量!下面是示例:
    function t(p,v){
        switch (p){
            case 'c':
                alert('char');break;
            case 'string':
                alert('string');break;
            case v:alert('variable:' + p);break;
            default:alert(p);
        }
    }
    
    t('c');//'char'
    t('string');//'string'
    t(123);//'123'
    t(123,123);//'variable:123'
  5. 程序随时可以throw出一个异常,throw出来的可以是任意表达式、对象或常量;当然,良好的异常处理系统是需要精心设计一下的。
  6. switch、while、do、for语句允许有一个前置的标签,配合break或continue语句使用来完成一些跳转。
  7. JavaScript对象是可变的键控集合(keyed collections),是属性的容器,属性名甚至可以是空字符串"",属性值可以是除undefined之外的任意值。简单类型(number,string,boolean,null,undefined)貌似是对象,因为它们有方法;但它们是不可变的。
  8. delete用来删除对象的属性,不会触及原型链中的对象;删除失败的时候,该操作返回false。全局的函数和变量定义也是全局对象的属性,因而可以用delete操作删除,而函数内部的变量声明和函数定义则无法删除,例如下列函数执行的结果是弹出“false”。
    function f(){
        var a = 3;
        alert(delete a);
    }
  9. string的fromCharCode方法从一串代表ASCII码的数字中,返回一个字符串,在某些情况下,这个方法可能会很有用。
    var a = String.fromCharCode(67,97,116);
    // a是'Cat'

  10. string的replace() 方法的第一个参数是字符串或者正则表达式。第二个参数如果是字符串,可以指定正则表达式的匹配分组等信息,如$3代表第三个捕获分组。第二个参数可以是函数而不是字符串。在这种情况下,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。
    该函数的参数与正则表达式exec方法返回的数组类似:第一个参数是匹配模式的字符串,接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数,再后面的参数是一个整数,声明了匹配在原字符串中出现的位置,最后一个参数是整个字符串。示例是最有力的说明手段:

    var s = 'fon230nva09dnfadsf';
    var r = /(\d{2})([a-zA-z])/g;
    var t = s.replace(r,function(){
        /*……*/
    });