例举3种强制类型转换和2种隐式类型转换

2021-03-23 08:56发布

1条回答
studentaaa
2021-03-27 08:31

本文谈谈JavaScript的类型转换,我们知道在JavaScript中声明变量不需指定类型, 对变量赋值也没有类型检查,同时JavaScript允许隐式类型转换。这些特征说明JavaScript属于弱类型的语言。


在强类型的C++中,多数情况下构造函数需要声明为explicit来避免隐式类型转换引起的误用 (见Item 15:资源管理类需要提供对原始资源的访问)。 弱类型的语言中类型的误用会更加隐蔽,比如:


// 弹出对话框中输入1

var a = prompt('input a number');

 

var b = a + 1;

 

console.log(b);   // 控制台输出 11   

本文便来总结一下如何使用JavaScript进行类型转换,以及JavaScript中隐式类型转换的规则。


转换为字符串

转换为字符串是应用程序中的常见操作,几乎所有语言都提供了将任何类型转换为字符串的通用接口。 比如Java和C#的toString方法、C++的函数std::to_string,当然还有JavaScript的toString方法。


多数的JavaScript宿主环境(比如Node.js和Chrome)都提供了全局函数toString; 与此同时Object.prototype也定义了toString方法,使得所有对象都拥有转换为字符串的能力。


比如一个Number转换为String:


var n = 1;

n.toString();   // '1'

toString接受一个参数指定进制,默认为10. 可以利用这个参数生成包括字母和数字的随机字符串:


Math.random().toString(36).substr(2);

random生成一个0到1的随机数,36进制的字符集为[0-9a-z](36个),substr用来截掉起始的"0."。 另外Object.prototype.toString可以用来检测JavaScript对象的类型:


var toString = Object.prototype.toString;

 

toString.call(new Date); // [object Date]

toString.call(new String); // [object String]

toString.call(Math); // [object Math]

 

// Since JavaScript 1.8.5

toString.call(undefined); // [object Undefined]

toString.call(null); // [object Null]

 

// 自定义类型

toString.call(new MyClass);   // [object Object]

转换为数字

字符串转换为数字也是常见需求,通常用来从用户输入或文件来获得一个Number。 在C++中可以用atoi、cin、scanf等函数,在JavaScript中可以直接用parseInt和parseFloat。 例如:


var iNum1 = parseInt("12345red");   //返回 12345

var iNum1 = parseInt("0xA");    //返回 10

var iNum1 = parseInt("56.9");   //返回 56

var iNum1 = parseInt("red");    //返回 NaN

var fNum4 = parseFloat("11.22.33"); //返回 11.22

注意NaN是JavaScript中唯一一个不等于自己的值。(NaN == NaN) === false! 如果遇到非法字符,parseInt和parseFloat会忽略之后的所有内容。


parseFloat只接受十进制数字的字符串,而parseInt还提供了第二个参数(可选)用来指定字符串表示数字的进制:


var iNum1 = parseInt("10", 2);  //返回 2

var iNum2 = parseInt("10", 8);  //返回 8

var iNum3 = parseInt("10", 10); //返回 10

上述例子来自 w3school.com.cn: http://www.w3school.com.cn/js/pro_js_typeconversion.asp


强制类型转换

强制类型转换在C++中有两种方式:用括号将类型声明在变量之前;或者调用构造函数。 在JavaScript中没有类型关键字(只有一个var来声明变量),因而只能调用构造函数:


Boolean(0)                // => false - 零

Boolean(new object())   // => true - 对象

Number(undefined)       // =>   NaN

Number(null)              // => 0

String(null)              // => "null"

隐式类型转换

隐式类型转换是最为隐蔽的地方,不加注意的话很容易在这一点上出错,对这一点的掌握也体现了JavaScript程序员经验。 JavaScript会自动转换表达式中对象的类型以完成表达式求值。

一周热门 更多>