本文共 3772 字,大约阅读时间需要 12 分钟。
接触过一些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把他们定义为相等的。
尽管这两个值是相等的,但他们的含义不同;undefined是声明了变量但是未对其初始化时赋予该变量的值,null则用于表示尚未存在的对象,如果函数或方法返回的是对象,那么找不到该对象时,则返回null;
Number类型有三个特殊的值,Number.MAX_VALUE和Number.MIN_VALUE,他们定义了Number类型变量的边界。另外一个特殊值就是NaN,表示非数(not a number),NaN是个奇怪的特殊值,一般说来,这种情况发生在类型(String,Boolean)转换失败时。NaN的另一个奇特之处在于:它与自身不相等,这意味着下面的代码将返回false:
由于这种原因,我们不推荐使用NaN值本身,函数isNaN()就可以做的很好:
- alert(isNaN("blue"));
- alert(isNaN(123));
类型转换 (1)、转换成字符串
ECMAScript的Boolean值,数字和字符串的原始值的有趣之处在于他们都是伪对象,这意味着他们实际上具有属性和方法,例如,字符串的长度,如下:
- var color = "blue";
- alert(color.length);
总而言之,三种主要的原始类型(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());
- alert(n.toString());
- var iNum = 10;
- alert(iNum.toString(2));
- alert(iNum.toString(8));
- alert(iNum.toString(16));
对数字调用toString(10)和toString()方法,效果一样。
(2)、转换成数字
ECMAScript提供两种把非数字的原始值转换成数字的方法,即parseInt()和parseFloat();前者把值转换成整数,后者把值转换成浮点数;
只有对String类型的数据调用这两个方法,它们才会被正确执行,对其他类型都返回NaN。 对于这两个方法,在判断字符串是数字值的过程中,paraeInt()和parseFloat()都会仔细分析该字符串,paraeInt()方法会首先查看位置0处的字符,判断它是否是个有效数字,如果不是,该方法会直接返回NaN,不再继续执行其他操作。但如果该字符是个数字值,则会继续查看位置1处的字符是否是个数字值,以此类推,直到最后,这一过程会持续到发现非有效数字的字符为止,不过字符串“22.5”会被转换为22,因为对于整数来说,小数点是无效字符,举例如下:
- var m = "1234blue";
- alert(parseInt(m));
- var n = "22.5";
- alert(parseInt(n));
parseInt()方法也有基模式,可以把2进制,8进制,16进制的字符串转换成整数,基是parseInt()方法的第二个参数指定的,举例如下:
- alert(parseInt("10",2));
- alert(parseInt("10",8));
- alert(parseInt("10",16));
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"));
- alert(Boolean("123"));
- alert(Boolean("new Object()"));
- alert(Boolean(""));
- alert(Boolean(0));
- alert(Boolean(null));
- alert(Boolean(undefined));
Number()强制转换时和parseInt()、parseFloat()大致相同,只是它转换的是整个值,而不是部分值,举例如下:
- alert(Number(false));
- alert(Number(true));
- alert(Number(undefined));
- alert(Number(null));
- alert(Number("5.5"));
- alert(Number("5.5.6"));
- alert(Number(undefined));
- alert(Number(new Object()));
最后一种强制类型转换是String(),它可以把任何值转换成字符串;强制转换成字符串和调用toString()方法唯一不同的是:对null值和undefined值强制类型转换,可以生成字符串,而不会错误:
- alert(String(null));
- alert(String(undefined));
- alert(null.toString());
- alert(undefined.toString());
转载地址:http://voasi.baihongyu.com/