JavaScript强制类型转换和隐式类型转换操作示例


Posted in Javascript onMay 01, 2019

本文实例讲述了JavaScript强制类型转换和隐式类型转换。分享给大家供大家参考,具体如下:

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

(1).转换为字符串

转换为字符串是应用程序中的常见操作,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]

转换为数字

在JavaScript中可以直接用parseInt和parseFloat。 例如:

var iNum1 = parseInt("red");  //返回 NaN
var fNum4 = parseFloat("11.22.44"); //返回 11.22

强制类型转换

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

Boolean(0) // => false - 零
Boolean(new object()) // => true - 对象
Number(undefined) // => NaN
Number(null) // => 0
String(null) // => “null”

隐式类型转换

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

(1)四则运算

加法运算符+是双目运算符,只要其中一个是String类型,表达式的值便是一个String。

对于其他的四则运算,只有其中一个是Number类型,表达式的值便是一个Number。

对于非法字符的情况通常会返回NaN:

‘1' * ‘a' // => NaN,这是因为parseInt(a)值为NaN,1 * NaN 还是 NaN

(2)判断语句

判断语句中的判断条件需要是Boolean类型,所以条件表达式会被隐式转换为Boolean。 其转换规则同Boolean的构造函数。

var obj = {};
if(obj){
while(obj);
}

(3)Native代码调用**

JavaScript宿主环境都会提供大量的对象,它们往往不少通过JavaScript来实现的。 JavaScript给这些函数传入的参数也会进行隐式转换。例如BOM提供的alert方法接受String类型的参数:

alert({a: 1}); // => [object Object]

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Add a Table to a Word Document
Jun 15 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
Sep 12 Javascript
Jquery之Ajax运用 学习运用篇
Sep 26 Javascript
jquery Moblie入门—hello world的示例代码学习
Jan 08 Javascript
js实现表单检测及表单提示的方法
Aug 14 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
Jul 22 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
浅谈JS之iframe中的窗口
Sep 13 Javascript
基于JavaScript实现弹幕特效
Aug 27 Javascript
JavaScript实现的斑马线表格效果【隔行变色】
Sep 18 Javascript
利用vue开发一个所谓的数独方法实例
Dec 21 Javascript
微信小程序tabbar底部导航
Nov 05 Javascript
Vue源码之关于vm.$delete()/Vue.use()内部原理详解
May 01 #Javascript
Vue.extend实现挂载到实例上的方法
May 01 #Javascript
JS html事件冒泡和事件捕获操作示例
May 01 #Javascript
JS实现的贪吃蛇游戏案例详解
May 01 #Javascript
javascript原型链学习记录之继承实现方式分析
May 01 #Javascript
微信小程序实现卡片左右滑动效果的示例代码
May 01 #Javascript
微信小程序常见页面跳转操作简单示例
May 01 #Javascript
You might like
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
2013/06/20 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP中构造函数和析构函数解析
2014/10/10 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
PHP实现的简单缓存类
2015/07/29 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
vue-cli安装使用流程步骤详解
2018/11/08 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
vue通过v-html指令渲染的富文本无法修改样式的解决方案
2020/05/20 Javascript
vue 实现click同时传入事件对象和自定义参数
2021/01/29 Vue.js
[01:20]2018DOTA2亚洲邀请赛总决赛战队Mineski晋级之路
2018/04/07 DOTA
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
python+selenium打印当前页面的titl和url方法
2018/06/22 Python
Python3.7黑帽编程之病毒篇(基础篇)
2020/02/04 Python
用python介绍4种常用的单链表翻转的方法小结
2020/02/24 Python
python实现电子词典
2020/03/03 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
Invicta手表官方商店:百年制表历史的瑞士腕表品牌
2019/09/26 全球购物
耐克亚太地区:Nike APAC
2019/12/07 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
荷叶圆圆教学反思
2014/02/01 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
伦敦奥运会口号
2014/06/13 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
导游词之晋城蟒河
2019/12/12 职场文书
Java Socket实现Redis客户端的详细说明
2021/05/26 Redis
CentOS安装Nginx并部署vue
2022/04/12 Servers