前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ECMAScript数据类型关系总结

ECMAScript数据类型关系总结

作者头像
csxiaoyao
发布2019-02-15 16:39:18
7840
发布2019-02-15 16:39:18
举报
文章被收录于专栏:csxiaoyaocsxiaoyao

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 类型的字面量

代码语言:javascript
复制
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 把它们定义为相等

代码语言:javascript
复制
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() 方法,确保数值不是无穷大

代码语言:javascript
复制
if (isFinite(iResult)) {
    alert("finite");
}

NaN(Not a Number)一般发生在类型(String、Boolean 等)转换失败时

代码语言:javascript
复制
alert(NaN == NaN);  //false

isNaN() 判断是否是非数

代码语言:javascript
复制
alert(isNaN("blue"));  //true

String 类型

String 是唯一没有固定大小的原始类型

类型转换

—>String

ECMAScript 的 Boolean、Number、String 的原始值是伪对象,实际上有属性和方法

toString()

ECMAScript 定义所有对象(包括伪对象和真对象)都有 toString() 方法,即使String原始值(伪对象)也有 Boolean:”true” 或 “false” Number:有两种模式(默认模式和基模式) 默认模式用相应的字符串输出十进制数字值(整数、浮点数、科学计数法)

代码语言:javascript
复制
var Num = 10.0;
alert(Num.toString()); // "10" 而非 "10.0"

基模式进行进制转换

代码语言:javascript
复制
alert("10".toString(16));   // "A"

—>Number

parseInt()parseFloat() 把非数字的 String 类型原始值转换成数字,其他类型调用返回 NaN

parseInt()

首先查看位置 0 处的字符,如果不是有效数字返回 NaN,如果是有效数字,继续向后查看直到发现非有效数字的字符为止,把该字符之前的字符串转换成数字

代码语言:javascript
复制
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() 方法的不同之处在于字符串必须以十进制形式表示浮点数,没有基模式

代码语言:javascript
复制
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

代码语言:javascript
复制
//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() 方法

代码语言:javascript
复制
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 值强制类型转换可以生成字符串而不引发错误

代码语言:javascript
复制
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 方法要求开发者明确地确认对象为某特定类型

代码语言:javascript
复制
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() 方法

代码语言:javascript
复制
var oNumberObject = new Number(68);
var iNumber = oNumberObject.valueOf();

String 对象

String 对象是 String 原始类型的对象表示法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年05月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5 种原始类型
    • typeof 运算符
      • Undefined 类型
        • Null 类型
          • Boolean 类型
            • Number 类型
              • String 类型
              • 类型转换
                • —>String
                  • toString()
                    • —>Number
                      • parseInt()
                      • parseFloat()
                  • 强制类型转换
                    • Boolean() 函数
                      • Number() 函数
                        • String() 函数
                        • == 自动转换规则
                        • Object 类型
                          • instanceof 运算符
                            • Boolean 对象
                              • Number 对象
                                • String 对象
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档