ECMAScript数据类型关系总结

ECMAScript数据类型关系总结

csxiaoyao对本节疑难点总结:
1. typeof 对于 null 值返回object,是历史遗留错误,现在 null 被解释为尚未存在的对象,但它仍是原始值
2. undefined:变量声明了未初始化赋予的值;null:尚未存在的对象;null == undefined
3. 未声明的变量使用除 typeof 以外的运算符会报错
4. ECMAScript 的 BooleanNumberString 的原始值是伪对象,实际上有属性和方法,如String有属性 length
5. String 是唯一没有固定大小的原始类型(行为与基本类型相似的不可变引用类型)

5 种原始类型

ECMAScript 有 5 种原始类型(primitive type),即 UndefinedNullBooleanNumberString

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")     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 对象具有下列属性:
1. constructor
对创建对象的函数的引用(指针)。对于 Object 对象,该指针指向原始的 Object() 函数。
2. Prototype
对该对象的对象原型的引用。对于所有的对象,它默认返回 Object 对象的一个实例。

Object 对象具有下列方法:
1. hasOwnProperty(property)
判断对象是否有某个特定的属性。必须用字符串指定该属性。(例如,o.hasOwnProperty(“name”))
2. IsPrototypeOf(object)
判断该对象是否为另一个对象的原型。
3. PropertyIsEnumerable
判断给定的属性是否可以用 for…in 语句进行枚举。
4. ToString()
返回对象的原始字符串表示。对于 Object 对象,ECMA-262 没有定义这个值,所以不同的 ECMAScript 实现具有不同的值。
5. 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 原始类型的对象表示法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值