标签:
数据类型
JS一共有六种数据类型,其中有五种基本数据类型,分别为Number、String、Boolean、Null、Undefined,和一种复杂数据类型——Object类型。
typeof
typeof操作符可以检测给定变量的数据类型;返回值除了number、string、boolean、undefined、object之外,还可以返回function。
注意:null会被返回object;因为null被认为是一个空的对象引用。
Undefined
只有一个值——undefined;使用关键字var声明变量,但并未加以初始化,变量就会默认取得undefined值。
初始化为undefined的变量、未初始化的变量、未声明的变量,执行typeof操作符时都会返回undefined。
但是console.log()未声明的变量会报错,可以以此检测变量是未初始化还是未声明。
Null
只有一个值——null;从逻辑角度来说,null值表示一个空的对象指针。
无论在什么情况下,都没有必要把一个变量的值显式地设置为undefined;但是,只要意在保存对象的变量还没有真正地保存对象,就应该明确地让该变量保存null值,不仅体现null作为空对象指针的惯例,而且易于区分null和undefined。
《JS权威指南》——通常认为null是Null类型的唯一值,它可以表示数字、字符串和对象是“无值”的。
《JS权威指南》——如果想将null或者undefined赋值给变量或者属性,或者将它们作为参数传入函数,最佳选择是使用null。
小tips:把null赋值给一个变量可以清除变量。
var x = 5;
console.log(x); //5
x = null;
console.log(x); //null
Boolean
只有两个值——true和false。
其它所有数据类型都可以调用转型函数Boolean(),将其转化为对应的Boolean值。
规则如下:
String:任何非空字符串转换为true;""(空字符串)转化为false。 //即使只有一个空格,也算非空字符串,转换为true。
Number:任何非0数字(包括Infinite)转换为true;0/NaN转换为false。
Object:任何对象转换为true;null转换为false。 //对象、数组、函数,只要是属于Object数据类型的,都转换为true。
Undefined:N/A转换为true;undefined转换为false。
Number
JS不区分整数值与浮点数值;JS中的所有数字均用浮点数值表示。
JS接收10进制、8进制、16进制的整数;最终都会被转换为10进制数值进行计算。
8进制以0开头,后跟0~7数字序列,如果数值超出了0~7这个范围,会忽略前导0,当做10进制进行解析。
console.log(070); //56
console.log(079); //79
(注意:JS标准并不支持8进制数字字面量。)
16进制以0x开头,后跟16进制数字;A~F大小写皆可。
console.log(0xCC); //204
1.浮点数值
保存浮点数值的内存空间是保存整数值的两倍,所以(如果可能)JS会自动将浮点数值转换为整数值。
浮点数值的精度非常高,永远不要测试某个特定值的浮点数值。
var x = 0.1 + 0.2;
console.log(x); //0.30000000000000004
console.log(x === 0.3); //false
使用科学计数法保存数值。
语法:[digits][.digits][(E|e)[(+|-)]digits]
var x = 1.233e5;
var y = 1.233e-5;
console.log(x); //123300
console.log(y); //0.00001233
2.数值范围
JS能够表示的值是有范围的,大于最大值为Infinite,小于最小值为-Infinite。
如果isFinite()函数返回true,则证明有穷,数值在最大值与最小值之间。
3.NaN
其意为非数值,Not a Number ;表示一个本来要返回数值的操作数未返回数值的情况。
NaN两大特点:任何涉及NaN的操作都会返回NaN;NaN与任何值都不相等,包括NaN本身。
isNaN()函数,任何不能转换为数值的值都会返回true。
isNaN()函数也适用于对象;在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值;如果不能,则基于这个返回值再调用toString()方法,再测试返回值。
4.数值转换
转型函数Number(),可以用于任何数据类型,规则如下:
如果是Boolean值,true或false分别转换为1或0;
如果是null值,则返回0;
如果是undefined值,则返回NaN;
如果是字符串,则:
如果字符串中只包含数字,则将其转换为10进制数值;数字前可以有 + 或 - ,前导 0 会被省略。 //如果数字以0开头,会被当做8进制数值来解析;如果数字以0x开头,会被当做16进制数值来解析。)
如果字符串中包含有效的浮点数值,则将其转换为对应的浮点数值。
如果字符串是空的(不包含任何字符,可以是空格),则将其转换为0。
如果字符串中包含除上述格式之外的字符,则将其转换为NaN。
如果是对象。则调用对象的valueOf()方法,然后依照前述规则转换返回的值;如果结果是NaN,则调用函数的toString()方法,然后再用前述规则转换返回的字符串值。
parseInt()函数对字符串的解析规则:
在转换字符串时,忽略字符串前面的空格,直到找到第一个非空格字符;
如果第一个字符不是数字或者 + - ,就会返回NaN;也就是说,用parseInt()转换空字符串会返回NaN。
如果第一个字符是数字字符,则会继续解析第二个字符,直到遇到非数字字符(小数点号属于非数字字符)。
parseInt()方法能够识别8进制与16进制的数字,但在转换时可能会存在误解,可以给parseInt()方法传递第二个参数,明确需要转换的数字的格式。
console.log(parseInt("115",10)); //"115"这个字符串里面的有效数字字符是10进制格式,输出结果为118。
console.log(parseInt("0x115",16)); //277
String
字符串必须加引号,单引号或双引号皆可。
1.字符字面量,也叫转义序列。
\n 换行
\t 水平制表
\v 垂直制表
\b 退格
\r 回车
\f 换页
\\ 反斜线
\‘ 单引号或撇号
\" 双引号
\xnn 以16进制代码nn表示的一个Latin-1字符
\unnnn 以16进制代码表示的一个Unicode字符
2.字符串的特点
JS中的字符串是不可变的,一旦创建,它们的值就不能改变;要改变某个变量中保存的字符串,首先销毁原来的字符串,然后再用一个新的字符串填充该变量。
事实上,基本类型值都是不可变的;引用类型值是可变的。
3.字符串转换
调用任何数据类型都有的String()转型函数,规则如下:
如果值有toString()方法,则调用该方法,并返回相应的结果。
如果值是null,返回"null"。
如果值是undefined,返回"undefined"。
除了Null、Undefined数据类型之外,Number、Boolean、String、Object数据类型都有toString()方法;这个方法返回相应值的字符串表现。
调用数值的toString()方法时可以传递参数,指定输出的数值类型(10进制或其它),默认为10进制。
var x = 118;
console.log(x.toString(10)); //将数值118转换为字符串,以10进制格式输出,其结果为"118"。
console.log(x.toString(16)); //"76"
Object
JS中的对象其实是一组数据和功能的集合。
创建Object类型的实例,并为其添加属性和方法,就可以创建自定义对象。
在JS中,Object类型是所有它的实例的基础,即Object所具有的属性和方法也同样存在于更具体的实例中。
Object的每个实例都具有下列属性和方法:
constructor
hasOwnProperty(propertyName)
isPrototypeOf(object)
propertyIsNumerable(propertyName)
toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值、布尔值表示,通常与toString()方法的返回值相同。
注意:BOM、DOM对象属于宿主对象,由宿主实现和提供定义,可能会也可能不会继承Object。
标签:
原文地址:http://www.cnblogs.com/cc156676/p/5720040.html