论坛首页 Web前端技术论坛

javascript基础

浏览 4708 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-12-28   最后修改:2010-01-05
        接触过一些javascript的知识,但是感觉总是很肤浅,从12.28开始,决定从头好好学习一下javascript,所用的参考书是《JavaScript高级程序设计》。
        以下是我在复习的过程中,感觉很重要的知识点,具体如下:
引用
ECMAScript的解释程序遇到未声明过的标识符的时候,用该变量名创建一个全局变量,并将其初始化为指定的值。

      typeof运算符
引用
对变量或值调用typeof运算符将返回下列值之一:
       "undefined",如果变量是Undefined类型;
       "boolean",如果变量是Bollean类型;
       "number",如果变量是Number类型;
       "string",如果变量是String类型;
       "object",如果变量是一种引用类型或Null类型;

你也许会问,为什么type运算符对与Null值也返回object,这实际上是JavaScript最初实现的中的一个错误,然后被ECMAScript沿用了,现在null被认为是对象的一个占位符,从而解释了这个矛盾,但从技术上讲,它仍然是原始类型。

        Undefined类型只有一个值,那就是undefined,当声明的变量未初始化时,该变量的默认值是undefined;
        Null类型也只有一个值,即null,是一个字面量,值undefined实际上是从值null派生出来的,因此ECMAScript把他们定义为相等的。
alert(null==undefined);     //output:true

        尽管这两个值是相等的,但他们的含义不同;undefined是声明了变量但是未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象,如果函数或方法返回的是对象,那么找不到该对象时,则返回null;
        Number类型有三个特殊的值,Number.MAX_VALUE和Number.MIN_VALUE,他们定义了Number类型变量的边界。另外一个特殊值就是NaN,表示非数(not a number),NaN是个奇怪的特殊值,一般说来,这种情况发生在类型(String,Boolean)转换失败时。NaN的另一个奇特之处在于:它与自身不相等,这意味着下面的代码将返回false:
alert(NaN==NaN);     //output:false

        由于这种原因,我们不推荐使用NaN值本身,函数isNaN()就可以做的很好:
         alert(isNaN("blue"));     //output:true
         alert(isNaN(123));     //output:false

类型转换
(1)、转换成字符串
        ECMAScript的Boolean值,数字和字符串的原始值的有趣之处在于他们都是伪对象,这意味着他们实际上具有属性和方法,例如,字符串的长度,如下:
var color = "blue";
alert(color.length);   //output:4

引用
总而言之,三种主要的原始类型(Boolean,String,Number)都有toString()方法,ECMAScript定义所有对象都有toString()方法,无论它是伪对象,还是真的对象。

        Boolean类型的对象的toString()方法只是输出"true"和"false";
        Number类型的对象的toString方法比较特殊,有两种模式:默认模式(toString())和基模式(toString(2)、toString(8)、toString(18));默认模式无论数字是什么模式,都默认输出10进制数字,而采用基模式会输出对应的进制表示:
            var m = 10;
            var n = 10.0;
            alert(m.toString());    //output:10
            alert(n.toString());    //output:10
            var iNum = 10;
            alert(iNum.toString(2));    //output:1010
            alert(iNum.toString(8));    //output:12
            alert(iNum.toString(16));   //output:a

        对数字调用toString(10)和toString()方法,效果一样。
(2)、转换成数字
        ECMAScript提供两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat();前者把值转换成整数,后者把值转换成浮点数;只有对String类型的数据调用这两个方法,它们才会被正确执行,对其他类型都返回NaN。
引用

        对于这两个方法,在判断字符串是数字值的过程中,paraeInt()和parseFloat()都会仔细分析该字符串,paraeInt()方法会首先查看位置0处的字符,判断它是否是个有效数字,如果不是,该方法会直接返回NaN,不再继续执行其他操作。但如果该字符是个数字值,则会继续查看位置1处的字符是否是个数字值,以此类推,直到最后,这一过程会持续到发现非有效数字的字符为止,不过字符串“22.5”会被转换为22,因为对于整数来说,小数点是无效字符,举例如下:
var m = "1234blue";
alert(parseInt(m));   //output:1234
var n = "22.5";
alert(parseInt(n));   //output:22


        parseInt()方法也有基模式,可以把2进制,8进制,16进制的字符串转换成整数,基是parseInt()方法的第二个参数指定的,举例如下:
            alert(parseInt("10",2));   //output:2
            alert(parseInt("10",8));   //output:8
            alert(parseInt("10",16));  //output:10

        parseFloat()方法的用法与parseInt()方法基本上相同,特殊的是parseFloat()方法里面的字符串数值必须是10进制表示(该方法会忽略其他进制前边的0)。
(3)、强制类型转换
        使用强制类型转换可以访问特定的值,即使它是另一种类型,ECMAScript可以使用一下3中强制类型转换:
Boolean(value)——把给定值转换成boolean类型
Number(value)——把给定值转换成number类型
String(value)——把给定值转换成string类型
        用这三个函数之一进行转换,将创建一个新值,来存放由原始值转换后的新值。
        当要转换的值是至少有一个字符的字符串、非0数字和对象时,Boolean()函数将返回true;如果该值是空字符串、数字0,null、undefined,它将返回false;
            alert(Boolean("kongxin"));   //output:true
            alert(Boolean("123"));   //output:true
            alert(Boolean("new Object()"));  //output:true
            alert(Boolean(""));  //output:false
            alert(Boolean(0));   //output:false
            alert(Boolean(null));   //output:false
            alert(Boolean(undefined));   //output:false

        Number()强制转换时和parseInt()、parseFloat()大致相同,只是它转换的是整个值,而不是部分值,举例如下:
            alert(Number(false));   //output:0
            alert(Number(true));   //output:1
            alert(Number(undefined));  //output:NaN
            alert(Number(null));  //output:0
            alert(Number("5.5"));   //output:5.5
            alert(Number("5.5.6"));   //output:NaN
            alert(Number(undefined));   //output:NaN
            alert(Number(new Object()));  //output:NaN

        最后一种强制类型转换是String(),它可以把任何值转换成字符串;强制转换成字符串和调用toString()方法唯一不同的是:对null值和undefined值强制类型转换,可以生成字符串,而不会错误:
            alert(String(null));    //null
            alert(String(undefined));     //undefined
            alert(null.toString());     //没有输出
            alert(undefined.toString());    //没有输出
   发表时间:2009-12-30  
呵呵,楼主跟我一样啊,我这几天也在看这本书!牛B牛B得紧啊
0 请登录后投票
   发表时间:2010-01-05  
不知道跟犀牛书比起来怎么样,如果有必要这本也看看。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics