javascript应该注意的小case--数据类型
2012-02-22 17:14
169 查看
js的数据类型:Number、String、Boolean、Undefined、Null和Object。我们在js里创建的数据一定是以上几种类型的一种。
1,typeof操作符
js提供了typeof操作符来检测数据的类型,但是typeof操作的结果只会是:number,string,boolean,undefined,object,function中的一个,这个和提供的数据类型是不一致的。
2,undefined类型
如果一个变量声明未赋值之前,它是undefined类型,并且有值是undefined。
要注意的是:如果我们对从未声明过的变量,它也是undefined类型,但是对它进行取值的操作将会产生一个变量未定义的错误。
3,Null类型
null值表示一个空对象指针,它也只有一个值null。
另外要注意的undefined值是派生自null值的,就有以下的结果:
尽管如此,但他们两个的作用完全是不一样的,因此我们如果确定一个变量要指向对象,还没有真正指向对象之前,应该在声明它暂时赋值为null。
4,Boolean类型
只有两个值ture,false,并且是区分大小写的,也就是说var isError = False;将产生错误。
js提供了一个Boolean(arg)的函数来将其它类型转为Boolean类型,更有意思也值得注意的特性是js会为流程控制语句(如if)自动调用Boolean类型的转换。
转型的规则如下:
Boolean的flase,String类型的“”,Number类型的0和NaN,Object类型的null,undefined类型的undefined会被认为是false,其它都是true。
5,Number类型
可用来表示分为整数和浮点数,整数又包括八进制(0开头)、十进制(默认)和十六进制(0x开头)。
其中八进制如果有某位超过了7,前面的0将被忽略,被认为是十进制。如070转为十进制是56,而018会认为是18。
浮点数值保存空间是整数的两倍,js会把如1.0、10.这样的数值用转为整数来保存。
要注意的是,尽量不要用基于js浮点数值运算:
另外有几个特殊的值要注意:
Number.MAX_VALUE、Number.MIN_VALUE存储的是所能支持的最大、最小的数,如果超过这个范围将会得到正无穷Infinity、负无穷-Infinity。我们可以用isFinite()函数来判断一个数是不是超出了范围。其中我们可以从Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY得到正无穷Infinity、负无穷-Infinity。
另外还有一个要注意的值NaN,任何一个需要返回数值的运算返回的不是数值将返回NaN,它是一个特殊数值,跟任何数值的任何运算都会返回NaN,并且它不与任何值相等包括自己。
另外有isNaN()函数,来判断传入的任意类型参数是不是NaN。isNaN会对参数进行转化,如果能转化为数值,就返回false.这上转化是对整体的一个转化,还会把true转为1,false转为0.如果参数是对象,它会先调用对象的valueOf(),如果不能转为数值,会再次调用toString()来判断。
6,数值转换:Number(),parseInt(),parseFloat()
Number()可以对任何类型的参数进行转换,转换规则如下:
Boolean类型true转为1,false转为0;
Number类型,直接返回;
undefined返回NaN;
String类型,空字符串转为0,数值类型的字符串会忽略所有前置的0转为相应的整型或浮点型,因此八进制将会被忽略,如果是ox开头的数字字符串,将按十六进制数处理转为相对应的十进制数,其它转为NaN;
object类型,null返回0,其它会调用该对象的valueOf()对其返回值操作,如果返回NaN,再调用其toString()方法,测定返回值。
parseInt()和parseFloat只对字符串参数操作。
parseInt()的转化规则:
它会忽略前面所有的空格,从第一个不是空格的字符开始转化,如果这个字符不是数字或者负号,将返回NaN;或者继续转化下一位置,直到下一个不是数字的位置或者结束位置。这样如“1234abcd”将返回1234,“”返回NaN,”12.3“返回12。
与Number()不同的是,parseInt()能识别出八进制、十六进制的数值进行对应的转化,但是在浏览器的实现上却出现了问题,IE中会把070转为70,而ff,chrome把070转为56。前面多个0时,相当于只有一个0。
不过幸好javascript提供了另一个参数来决定要何种(2/8/10/16)进制数来处理。
parseFloat()与parseInt()类似,也会逐个检查字符,直到不是数值的字符或第二个小数点出现。
6,String类型
几乎所有的类型(null和undefined除外)都会有一个tostring()的方法,把自身转为字符串类型。
另外,数值型的toString()还可以接受一个参数(2/8/10/16),来决定按何种进制表示的字符串值。
对于null和undefined调用toString()将产生错误,如果不确定要转换值是不是null/undefined,可以调用String()来转换,它会把null转为”null“,undefined转化为"undefined",其它与toString()一样。
7,Object类型
此类型是一组数据和功能的集合,我们可以var o = new Object();或var o = {};来创建对象。
每个object实例都有一些方法/属性:
constructor属性:用来保存创建当前对象的方法。
hasOwnProperty(name):可用于检测当前对象的实例是否有某个属性。
isPrototypeOf(object):用于检测传入的对象是不是另一对象的原型。
propertyIsEnumerable(name):用于检测对象的这个属性是不是可以用for-in来枚举。
toString():返回对象的字符串表示。
valueof():返回对象的字符串、布尔或数值表示。通常与toString()返回值一样。
1,typeof操作符
js提供了typeof操作符来检测数据的类型,但是typeof操作的结果只会是:number,string,boolean,undefined,object,function中的一个,这个和提供的数据类型是不一致的。
2,undefined类型
如果一个变量声明未赋值之前,它是undefined类型,并且有值是undefined。
要注意的是:如果我们对从未声明过的变量,它也是undefined类型,但是对它进行取值的操作将会产生一个变量未定义的错误。
var message; alert(typeof message); // undefined alert(message); // undefined //var message2; alert(typeof message2); // undefined alert(message2); // 错误
3,Null类型
null值表示一个空对象指针,它也只有一个值null。
alert(typeof null); // object alert(null); // null
另外要注意的undefined值是派生自null值的,就有以下的结果:
alert(undefined == null); // true
尽管如此,但他们两个的作用完全是不一样的,因此我们如果确定一个变量要指向对象,还没有真正指向对象之前,应该在声明它暂时赋值为null。
4,Boolean类型
只有两个值ture,false,并且是区分大小写的,也就是说var isError = False;将产生错误。
js提供了一个Boolean(arg)的函数来将其它类型转为Boolean类型,更有意思也值得注意的特性是js会为流程控制语句(如if)自动调用Boolean类型的转换。
转型的规则如下:
Boolean的flase,String类型的“”,Number类型的0和NaN,Object类型的null,undefined类型的undefined会被认为是false,其它都是true。
5,Number类型
可用来表示分为整数和浮点数,整数又包括八进制(0开头)、十进制(默认)和十六进制(0x开头)。
其中八进制如果有某位超过了7,前面的0将被忽略,被认为是十进制。如070转为十进制是56,而018会认为是18。
浮点数值保存空间是整数的两倍,js会把如1.0、10.这样的数值用转为整数来保存。
要注意的是,尽量不要用基于js浮点数值运算:
alert(0.1 + 0.2); // 输出是0.30000000000000004
另外有几个特殊的值要注意:
Number.MAX_VALUE、Number.MIN_VALUE存储的是所能支持的最大、最小的数,如果超过这个范围将会得到正无穷Infinity、负无穷-Infinity。我们可以用isFinite()函数来判断一个数是不是超出了范围。其中我们可以从Number.NEGATIVE_INFINITY、Number.POSITIVE_INFINITY得到正无穷Infinity、负无穷-Infinity。
另外还有一个要注意的值NaN,任何一个需要返回数值的运算返回的不是数值将返回NaN,它是一个特殊数值,跟任何数值的任何运算都会返回NaN,并且它不与任何值相等包括自己。
另外有isNaN()函数,来判断传入的任意类型参数是不是NaN。isNaN会对参数进行转化,如果能转化为数值,就返回false.这上转化是对整体的一个转化,还会把true转为1,false转为0.如果参数是对象,它会先调用对象的valueOf(),如果不能转为数值,会再次调用toString()来判断。
alert(isNaN("1234asdf")); // true alert(isNaN(0070)); // false alert(isNaN("00070")); // false alert(isNaN(0x70)); // false alert(isNaN("0x70")); // false alert(isNaN(false)); // false alert(isNaN("")); // false alert(isNaN(NaN)); // true
6,数值转换:Number(),parseInt(),parseFloat()
Number()可以对任何类型的参数进行转换,转换规则如下:
Boolean类型true转为1,false转为0;
Number类型,直接返回;
undefined返回NaN;
String类型,空字符串转为0,数值类型的字符串会忽略所有前置的0转为相应的整型或浮点型,因此八进制将会被忽略,如果是ox开头的数字字符串,将按十六进制数处理转为相对应的十进制数,其它转为NaN;
object类型,null返回0,其它会调用该对象的valueOf()对其返回值操作,如果返回NaN,再调用其toString()方法,测定返回值。
alert(Number("1234asdf")); // NaN alert(Number("00070")); // 70 alert(Number("false")); // 0 alert(Number("")); // 0
parseInt()和parseFloat只对字符串参数操作。
parseInt()的转化规则:
它会忽略前面所有的空格,从第一个不是空格的字符开始转化,如果这个字符不是数字或者负号,将返回NaN;或者继续转化下一位置,直到下一个不是数字的位置或者结束位置。这样如“1234abcd”将返回1234,“”返回NaN,”12.3“返回12。
alert(parseInt("1234abcd")); // 1234 alert(parseInt("")); // NaN alert(parseInt("12.34")); // 12
与Number()不同的是,parseInt()能识别出八进制、十六进制的数值进行对应的转化,但是在浏览器的实现上却出现了问题,IE中会把070转为70,而ff,chrome把070转为56。前面多个0时,相当于只有一个0。
alert(parseInt("070")); // ie弹出70,ff,chrome弹出56
不过幸好javascript提供了另一个参数来决定要何种(2/8/10/16)进制数来处理。
alert(parseInt("070","8")); // 都弹出56
parseFloat()与parseInt()类似,也会逐个检查字符,直到不是数值的字符或第二个小数点出现。
alert(parseFloat("1234abcd")); // 1234 alert(parseFloat("")); // NaN alert(parseFloat("12.34")); // 12 alert(parseFloat("12.34.22")); // 12.34 alert(parseFloat("0x23")); // 0 alert(parseFloat("0323")); // 323
6,String类型
几乎所有的类型(null和undefined除外)都会有一个tostring()的方法,把自身转为字符串类型。
另外,数值型的toString()还可以接受一个参数(2/8/10/16),来决定按何种进制表示的字符串值。
对于null和undefined调用toString()将产生错误,如果不确定要转换值是不是null/undefined,可以调用String()来转换,它会把null转为”null“,undefined转化为"undefined",其它与toString()一样。
7,Object类型
此类型是一组数据和功能的集合,我们可以var o = new Object();或var o = {};来创建对象。
每个object实例都有一些方法/属性:
constructor属性:用来保存创建当前对象的方法。
hasOwnProperty(name):可用于检测当前对象的实例是否有某个属性。
isPrototypeOf(object):用于检测传入的对象是不是另一对象的原型。
propertyIsEnumerable(name):用于检测对象的这个属性是不是可以用for-in来枚举。
toString():返回对象的字符串表示。
valueof():返回对象的字符串、布尔或数值表示。通常与toString()返回值一样。
相关文章推荐
- JavaScript数据类型转换的注意事项
- 1Z0-051 QUESTION 24 数据类型应该注意的地方
- 浅谈javascript六种数据类型以及特殊注意点
- javascript应该注意的小case--函数
- 注意Javascript数据类型
- javascript应该注意的小case--操作符
- javascript之六种数据类型以及特殊注意点
- 1Z0-051 QUESTION 21 LONG数据类型应该注意的地方
- javascript中的typeof返回数据类型注意
- double float 类型的数据(小数)在作计算的时候,需要注意的。(Java和JavaScript)都有这问题
- javascript(注意点) 数据类型和变量
- acm应该注意的数据类型问题
- 浅谈javascript六种数据类型以及特殊注意点
- javascript之六种数据类型以及特殊注意点
- 浅谈javascript六种数据类型以及特殊注意点
- [JavaScript高级程序设计]语法、数据类型和一些区别注意
- JavaScript数据类型的一些注意点(2)
- javaScript数据类型和变量需要注意的几个细节
- JavaScript数据类型的一些注意点(3)
- acm应该注意的数据类型问题