ECMAScript数据类型关系总结
Write By CS逍遥剑仙
我的主页: csxiaoyao.com
GitHub: github.com/csxiaoyaojianxian
Email: sunjianfeng@csxiaoyao.com
QQ: 1724338257
csxiaoyao对本节疑难点总结:
typeof
对于null
值返回object
,是历史遗留错误,现在null
被解释为尚未存在的对象,但它仍是原始值undefined
:变量声明了未初始化赋予的值;null
:尚未存在的对象;null == undefined
- 未声明的变量使用除
typeof
以外的运算符会报错 - ECMAScript 的
Boolean
、Number
、String
的原始值是伪对象,实际上有属性和方法,如String
有属性 length String
是唯一没有固定大小的原始类型(行为与基本类型相似的不可变引用类型)
5 种原始类型
ECMAScript 有 5 种原始类型(primiUndefined
、Null
、Boolean
、Number
和 String
typeof 运算符
undefined - 如果变量是 Undefined 类型的
boolean - 如果变量是 Boolean 类型的
number - 如果变量是 Number 类型的
string - 如果变量是 String 类型的
object - 如果变量是一种引用类型或 Null 类型的
注释:null 值返回object,这实际上是 JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符,从而解释了这一矛盾,但从技术上来说,它仍然是原始值
Undefined 类型
Undefined 类型只有一个值: undefined。当声明的变量未初始化时,该变量将被赋予默认值 undefined,即 undefined 类型的字面量
var oTemp;
alert(oTemp == undefined); //true
alert(typeof oTemp); //undefined
alert(typeof oTemp2); //undefined
function testFunc() {
}
alert(testFunc() == undefined); //true 函数无明确返回值返回 undefined
注释:typeof 运算符不区分 undefined 和未定义值(都输出undefined,实际是两种不同的值),若对 oTemp2 使用除 typeof 之外的其他运算符会引起错误
只有 typeof 才能用于未声明的变量
Null 类型
Null类型只有一个字面量值 null,值 undefined 实际上是从值 null 派生的,因此 ECMAScript 把它们定义为相等
alert(null == undefined); //true
Boolean 类型
Boolean 类型有两个字面量值:true 和 false
Number 类型
Number 类型既可表示 32 位的整数,也可表示 64 位浮点数
尽管所有整数都可表示为八进制或十六进制的字面量,但所有数学运算返回的都是十进制结果
定义浮点值字面量,必须包括小数点和小数点后的一位数字(1.0 而不是 1)
浮点字面量进行计算前,真正存储的是字符串
特殊的 Number 值:Number.MAX_VALUE、Number.MIN_VALUE、Number.POSITIVE_INFINITY、Number.NEGATIVE_INFINITY、Infinity、NaN
计算生成的数 > Number.MAX_VALUE 时将被赋予值 Number.POSITIVE_INFINITY 即 Infinity
计算生成的数 < Number.MIN_VALUE 时将被赋予值 Number.NEGATIVE_INFINITY 即 -Infinity
调用isFinite() 方法,确保数值不是无穷大
if (isFinite(iResult)) {
alert("finite");
}
NaN(Not a Number)一般发生在类型(String、Boolean 等)转换失败时
alert(NaN == NaN); //false
isNaN() 判断是否是非数
alert(isNaN("blue")); //true
String 类型
String 是唯一没有固定大小的原始类型
类型转换
--->String
ECMAScript 的 Boolean、Number、String 的原始值是伪对象,实际上有属性和方法
toString()
ECMAScript 定义所有对象(包括伪对象和真对象)都有 toString() 方法,即使String原始值(伪对象)也有
Boolean:"true" 或 "false"
Number:有两种模式(默认模式和基模式)
默认模式用相应的字符串输出十进制数字值(整数、浮点数、科学计数法)
var Num = 10.0;
alert(Num.toString()); // "10" 而非 "10.0"
基模式进行进制转换
alert("10".toString(16)); // "A"
--->Number
parseInt()
和 parseFloat()
把非数字的 String 类型原始值转换成数字,其他类型调用返回 NaN
parseInt()
首先查看位置 0 处的字符,如果不是有效数字返回 NaN,如果是有效数字,继续向后查看直到发现非有效数字的字符为止,把该字符之前的字符串转换成数字
var iNum = parseInt("12345red"); //返回 12345
var iNum = parseInt("0xA"); //返回 10
var iNum = parseInt("56.9"); //返回 56,对整数来说,小数点是无效字符
var iNum = parseInt("red"); //返回 NaN
var iNum = parseInt("10", 8);//返回 8
parseFloat()
parseFloat() 方法的不同之处在于字符串必须以十进制形式表示浮点数,没有基模式
var fNum1 = parseFloat("12345red"); //返回 12345
var fNum2 = parseFloat("0xA"); //返回 NaN
var fNum3 = parseFloat("11.2"); //返回 11.2
var fNum4 = parseFloat("11.22.33"); //返回 11.22
var fNum5 = parseFloat("0102"); //返回 102 忽略前导 0
var fNum1 = parseFloat("red"); //返回 NaN
强制类型转换
Boolean(value) - 把给定的值转换成 Boolean 型
Number(value) - 把给定的值转换成数字(可以是整数或浮点数)
String(value) - 把给定的值转换成字符串
Boolean() 函数
true:非空字符串、非 0 数字、对象
false:空字符串、0、undefined、null
//false
var b1 = Boolean(""); // - 空字符串
var b1 = Boolean(null); // - null
var b1 = Boolean(0); // - 0
//true
var b1 = Boolean("hello"); // - 非空字符串
var b2 = Boolean(50); // - 非零数字
var b1 = Boolean(new object()); // - 对象
Number() 函数
与 parseInt() 和 parseFloat() 方法的处理方式相似,只是转换的是整个值,而不是部分值
如果字符串值能被完整地转换,Number() 将判断调用 parseInt() 方法还是 parseFloat() 方法
Number(false) 0
Number(true) 1
Number(undefined) NaN
Number(null) 0
Number("1.2") 1.2
Number("12") 12
Number("1.2.3") csxiaoyao.com NaN
Number(new object()) NaN
Number(50) 50
String() 函数
只需调用作为参数传递进来的值的 toString() 方法,和调用 toString() 方法的唯一不同之处在于,对 null 和 undefined 值强制类型转换可以生成字符串而不引发错误
var s1 = String(null); //"null"
var oNull = null;
var s2 = oNull.toString(); //会引发错误
== 自动转换规则
number:string ( string ---> number)
null:undefined ( == )
boolean:? ( boolean ---> number )
number/string:object ( number/string ---> object)
Object 类型
Object 对象具有下列属性:
- constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。 - Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。
Object 对象具有下列方法:
- hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty("name")) - IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。 - PropertyIsEnumerable
判断给定的属性是否可以用 for...in 语句进行枚举。 - ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。 - ValueOf()
返回最适合该对象的原始值。对于许多对象,该方法返回的值都与 ToString() 的返回值相同。
instanceof 运算符
instanceof 运算符与 typeof 运算符相似,用于识别正在处理的对象的类型。与 typeof 方法不同的是,instanceof 方法要求开发者明确地确认对象为某特定类型
var oStringObject = new String("hello world");
console.log(oStringObject instanceof String); //true
console.log(typeof oStringObject); //object
Boolean 对象
Boolean 对象是 Boolean 原始类型的引用类型
Number 对象
Number 对象是 Number 原始类型的引用类型
要得到数字对象的 Number 原始值,只需要使用 valueOf() 方法
var oNumberObject = new Number(68);
var iNumber = oNumberObject.valueOf();
String 对象
String 对象是 String 原始类型的对象表示法