js数据类型种类
js数据类型一共有7种,分别是:number,string,Null ,undefined,symbol,boolean,Object其中symbol类型不常用,所以重点理解其余6种,
1.1 number
number类型是ECMAscript中最令人关注的数据类型了,这种类型使用 IEEE754 格式(二进制浮点数算术标准)64位浮点数来表示 整数和浮点数值,浮点数值即小数,也就是说这就是说,JavaScript语言的底层根本没有整数,所有数字都是小数(64位浮点数)。
var 1=1.0 //true
1.1.1 最基本的数值字面量格式如下几种:
十进制:十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值
默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。下面是一些例子。
var octalNum1 = 070; // 八进制的 56
var octalNum2 = 079; // 无效的八进制数值——解析为 79
var octalNum3 = 08; // 无效的八进制数值——解析为 8
var hexNum1 = 0xA; // 十六进制的 10
var hexNum2 = 0x1f; // 十六进制的 31
var aum1 =0b110;//十进制的6
var aum= 0b1010;//十进制的10
复制代码
1.1.2数值范围
由于内存的限制,ECMAScript 并不能保存世界上所有的数值。使用Number.MIN_VALUE 和Number.MAX_VALUE可以得知ECMAscript能够表示的最小数值和最大数值,最小数值是 5e-324;最大数值是1.7976931348623157e+308,如果出现超出这个数值范围的值,就会被自动转换为特殊的infinity值。如果这个值是负数,则会被转换成 -Infinity (负无穷),如果这个数值是正数,则会被转换成 Infinity (正无穷)。可以使用isFinite()函数来检测一个数值是否在数值范围内,如:
var result = Number.MAX_VALUE + Number.MAX_VALUE;
alert(isFinite(result)); //false
var result = 11111111111111111111111111111111111111111111111111111111111
alert(isFinte(result); //true
复制代码
1.1.3NaN
NaN ,即非数值(Not a Number)是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数 未返回数值的情况(这样就不会抛出错误了)。例如,在其他编程语言中,任何数值除以 0都会导致错误, 从而停止代码执行。但在 ECMAScript中,0除以 0会返回 NaN,正数除以 0 返回 Infinity,负数除以 0返回-Infinity。 ,因此不会影响其他代码的执行。 NaN 与任何值都不相等,包括 NaN 本身。但是NaN仍然是一个
alert(NaN == NaN); //false
2.2 string
String 类型用于表示由零或多个 16 位 Unicode 字符组成的字符序列,即字符串。字符串可以由双 引号(")或单引号(')表示,因此下面两种字符串的写法都是有效的:
var firstName = "Nicholas";
var lastName = 'Zakas';
复制代码
2.2.1 字符字面量
String 数据类型包含一些特殊的字符字面量,也叫转义序列,用于表示非打印字符,或者具有其 他用途的字符。这些字符字面量如下表所示:
字面量 | 含义 |
---|---|
\n | 换行 |
\t | 制表 |
\b | 空格 |
\r | 回车 |
\f | 进纸 |
\ | 斜杠 |
' | 单引号( ' ),在用单引号表示的字符串中使用。例如: 'He said, 'hey.'' |
" | 双引号( " ),在用双引号表示的字符串中使用。例如: "He said, "hey."" |
\xnn | 以十六进制代码 nn 表示的一个字符(其中 n 为0~F)。例如, \x41 表示 "A" |
\unnnn | 以十六进制代码 nnnn 表示的一个Unicode字符(其中 n 为0~F)。例如, \u03a3 表示希腊字符Σ |
ECMAScript 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变 某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量,
3.3Null和Undefined
Null类型是一个只有一个值的数据类型,这个值就是null,它表示一个空对象指针,使用typeof检测符可以确定,
var car = null;console.log(car) //Object
如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为 null 而不是其他值。这样 一来,只要直接检查 null 值就可以知道相应的变量是否已经保存了一个对象的引用
Undefined类型是第二个只有一个值的数据类型,即特殊的undefined,在使用 var 声明变量但未对其加以初始化时, 这个变量的值就是 undefined ;
var message;console.log(message == undefined); //true
null和undefined有共同之处,都可以表示“没有”
var a = undefined;
// 或者
var a = null;
复制代码
这两种写法的效果几乎等价。同时
console.log(null == undefined) //true
一般来说,对于对象,如果你目前不想给它赋值,那么就初始化null,对于非对象来说,如果不想给值的话, 就初始化为undefined(变量申明没有初始化的话,默认为undefined,可以不写),
4.4Boolean值
Boolean 类型是 ECMAScript 中使用得最多的一种类型,该类型只有两个字面值:true 和 false 布尔值代表“真”和“假”两个状态。“真”用关键字true表示,“假”用关键字false表示。布尔值只有这两个值。
这两个值与数字值不是一回事,因此 true 不一定等于 1,而 false 也不一定等于 0。需要注意的是, Boolean 类型的字面值 true 和 false 是区分大小写的。也就是说, True 和 False(以及其他的混合大小写形式)都不是 Boolean 值,只是标识符。 布尔值往往用于流程控制语句,如下:
if ('') {
console.log('true');
}
// 没有任何输出
复制代码
5.5Object
对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型。
什么是对象?简单说,对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。
var obj = {
foo: 'Hello',
bar: 'World'
};
复制代码
上面代码中,大括号就定义了一个对象,它被赋值给变量obj,所以变量obj就指向一个对象。该对象内部包含两个键值对(又称为两个“成员”),第一个键值对是foo: 'Hello',其中foo是“键名”(成员的名称),字符串Hello是“键值”(成员的值)。键名与键值之间用冒号分隔。第二个键值对是bar: 'World',bar是键名,World是键值。两个键值对之间用逗号分隔。键名如果是数字,会自动转换为字符串,如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。
Object 的每个实例都具有下列属性和方法:
constructor :保存着用于创建当前对象的函数。对于前面的例子而言,构造函数(constructor) 就是 Object() 。
hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例 的原型中)是否存在。其中,作为参数的属性名( propertyName )必须以字符串形式指定(例 如: o.hasOwnProperty("name") )。
isPrototypeOf(object) :用于检查传入的对象是否是传入对象的原型
propertyIsEnumerable(propertyName) :用于检查给定的属性是否能够使用 for-in 语句 来枚举。与 hasOwnProperty() 方法一样,作为参数的属性名必须以字符 串形式指定。
toLocaleString() :返回对象的字符串表示,该字符串与执行环境的地区对应。
toString() :返回对象的字符串表示。
valueOf() :返回对象的字符串、数值或布尔值表示。通常与 toString() 方法的返回值 相同。
6.参考资料
2.javascript高级程序开发(第三版)