javascript篇-----数据类型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript篇-----数据类型相关的知识,希望对你有一定的参考价值。
ECMAScript中一共有6种数据类型,其中包括5种基本数据类型(Undefined,Null,Boolean,Number,String)以及一种复杂数据类型(Object)。【ES6增加多了一种Symbol数据类型,但这里先不做讨论】 Undefined类型Undefined类型只有一个undefined值。在使用var声明变量但未对其加以初始化的时候,这个变量的值就会被自动的赋上undefined值。 1 { 2 var name; 3 console.log(name); //undefined 4 } Null类型Null类型也同样只用一个null值。null值在逻辑角度上代表一个空对象指针,所以使用typeof操作符检测null值时会返回“object”。 1 { 2 var dd = null; 3 console.log(typeof dd); 4 } 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null。这样一来,只要直接检查null值就可以知道相应的变量是否已经保存了一个对象的引用。 Boolean类型Boolean类型有两个字面值:true和false。这里需要注意一下,Boolean类型的字面值true和false是区分大小写的。True和False都不算是Boolean的值,只能算是标识符。 ECMAScript中所有数据类型值都能通过调用转型函数Boolean()转换为其相对应的Boolean值。 1 { 2 var bool = 13; 3 var _bool = Boolean(bool); 4 console.log(_bool); //true 5 } 调用转换函数返回的值是true还是false,取决于要转换的数据类型及其实际值。下表给出了各种数据类型及其相对应的转换规则:
Number类型ECMAScript中的Number类型使用了IEEE754格式来表示整数和浮点数值,支持各种数值类型。关于Number类型有几点可以讨论下。 浮点数值所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后面必须至少有以为数字。为了减小存储数值的时的内存占用(保存浮点数值需要的内存空间是保存整数值的两倍),ECMAScript会尽可能的将浮点数值转换为整数值。 1 { 2 var float1 = 1.; //小数点后没有数字,解析为1 3 var float2 = 10.0 //整数,解析为10 4 } 数值范围由于内存的限制,ECMAScript所能保存的数值是有限的,其所能保存的最小数值和最大数值分别保存在Number.MIN_VALUE和Number.MAN_VALUE之中。在大多数的浏览器中,这两个值分别是5e-324(科学技术法)和1.7976931348623157e+308。如果某次计算的结果超出了这个数值范围,那么这个数值就会被自动转换成特殊的Infinity(正无穷)或者-Infinity(负无穷)。对Infinity和-Infinity的判断可以通过使用isFinite()函数。这个函数在参数位于最小和最大数值之间时会返回true。 1 { 2 var result1 = 121; 3 var result2 = Number.MAX_VALUE + Number.MAX_VALUE; 4 console.log(isFinite(result1)); //true 5 console.log(isFinite(result2)); //false 6 } NaNNaN,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作但未返回数值的情况(这样就不会抛出错误)。NaN本身具有两个非同异常的特点。
针对NaN的这两个特点,ECMAScript定义了isNaN()函数。这个函数接受一个参数,该参数可以是任何类型,而函数会帮我们确定这个参数是否“不是数值”。isNaN()在接收到一个值之后,会尝试将这个值转换为数值,任何不能被转换为数值的值都会导致这个函数返回true。 1 { 2 console.log(isNaN(NaN)); //true 3 console.log(isNaN(100)); //false(100是一个数值) 4 console.log(isNaN(‘100‘)); //false(可以转换成数值100) 5 console.log(isNaN(‘blue‘)); //true(不能转换成数值) 6 console.log(isNaN(false)); //false(可以转换成数值1) 7 } isNaN()也是适用于对象的,但是这里不讨论,下面+。 数值转换Number()、parseInt()和parseFloat()这三个函数可以把非数值转换为数值。第一个转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。 Number()函数的转换规则如下。
1 { 2 var num1 = Number(‘hello‘); //转换为NaN,不包含任何有意义的数字值 3 var num2 = Number(‘‘); //转换为0,空字符串 4 var num3 = Number(‘00101‘); //转换为101,忽略前导零 5 var num4 = Number(‘true‘); //转换为1,布尔值的转换规则 6 var num5 = Number(‘0012.3‘); //转换为12.3,忽略前导零 7 }
相比较Number函数对字符串复杂和不合理的转换规则,parseInt()函数对字符串的转换则相对比较简单和合理,所以更常用。parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。也就是说,用parseInt()转换空字符串会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。 1 { 2 var num1 = parseInt(‘5656hello‘); //5656 3 var num2 = parseInt(‘‘); //NaN 4 var num3 = parseInt(‘33.4‘); //33 5 var num4 = parseInt(‘33‘); //33 6 }
可以为parseInt()提供第二个参数:转换时使用的基数(即多少进制)。如果知道要解析的值是十六进制格式的字符串,那么可以指定基数16作为第二个参数。 1 { 2 var num1 = parseInt(‘0xAf‘, 16); //175,十六进制转换 3 var num2 = parseInt(‘AF‘, 16); //175,传入第二个参数时,十六进制的‘0x‘可以省略 4 var num3 = parseInt(‘AF‘); //NaN 5 }
与parseInt()函数类似,parseFloat()也是从第一个字符开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。其次,如果字符串包含的是一个可解析的为整数的数,parseFloat()会返回整数。 1 { 2 var num1 = parseFloat(‘456red‘); //456,解析为整数 3 var num2 = parseFloat(‘22.5‘); //22.5 4 var num2 = parseFloat(‘123.123.12‘); //123.123,第一个小数点有效,第二个小数点无效 5 var num3 = parseFloat(‘052.2‘); //52.5,忽略前导零 6 var num3 = parseFloat(‘0.125e7‘); //31250000,科学计数法 7 }
String类型String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。字符串可以由双引号(")或者单引号(‘)表示。 字符字面量String数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其他用途的字符。转义序列可以在出现在字符串中的任意位置,而且也将被作为一个字符来解析。转义序列有这些。
任何字符串的长度都可以通过访问其length属性取得。 1 { 2 var text = ‘Some words.‘ 3 console.log(text.length); //10 4 }
字符串的特点ECMAScript中的字符串是不可变的,字符串一旦创建,他们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。 1 { 2 var text = ‘Some words‘; 3 text = text + ‘for you.‘; //将原text字符串变量‘Some words‘和新创建字符串值‘for you.‘连接,得到新的字符串值‘Some words for you.‘,并将新的字符串值填充text变量。 4 }
转换为字符串有两种方式能够把一个值转换为一个字符串。 第一种方式是使用几乎每一个值都有的toString()方法(null和undefined只有这个方法)。这个方法会返回相应值的字符串表现。 1 { 2 var num = 11; 3 var numToString = num.toString(); //‘11‘ 4 var bool = true; 5 var boolToString = bool.toString(); //‘true‘ 6 }
调用数值的toString()方法时,可以传递一个参数:输出数值的技术。默认情况下,toString()方法以十进制格式返回数值的字符串表示。而通过传递参数,toString()可以输出二进制、八进制、十六进制、乃至其他任意有效进制格式表示的字符串值。 1 { 2 var num = 10; 3 console.log(num.toString()); //‘10‘ 4 console.log(num.toString(2)); //‘1010‘ 5 console.log(num.toString(8)); //‘12‘ 6 console.log(num.toString(10)); //‘10‘ 7 console.log(num.toString(16)); //‘a‘ 8 }
第二种方式能在任何类型值的情况下使用(包括null和undefined),就是调用转型函数String()。
1 { 2 var value1 = 10; 3 var value2 = true; 4 var value3 = null; 5 var value4; 6 console.log(String(value1)); //‘10‘ 7 console.log(String(value2)); //‘true‘ 8 console.log(String(value3)); //‘null‘ 9 console.log(String(value4)); //‘undefined‘,value4未赋值所以是undefined 10 } Object类型ECMAScript中的对象其实就是一组数据和功能的集合。对象可以通过执行new操作符后跟要创建的对象类型的名称来创建。而创建Object类型的实例并为其添加属性和方法,就可以创建自定义对象。 1 { 2 var o = new Object(); 3 o.name = ‘myname‘; 4 }
在ECMAScript中,Object类型是所有它的实力的基础。换句话说,Object类型所具有的任何属性和方法也同样存在于更具体的对象中。因此,每个实例都具有下面的属性和方法。
以上是关于javascript篇-----数据类型的主要内容,如果未能解决你的问题,请参考以下文章 |