位置: 编程技术 - 正文

JavaScript隐式类型转换(js中的隐式类型转换)

编辑:rootadmin

推荐整理分享JavaScript隐式类型转换(js中的隐式类型转换),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:js隐式函数,js隐式类型转化的方法,jsp隐式对象,js隐式类型,js隐式类型,js隐士类型转换,js隐士类型转换,js隐式类型,内容如对您有帮助,希望把文章链接给更多的朋友!

JavaScript的数据类型是非常弱的(不然不会叫它做弱类型语言了)!在使用算术运算符时,运算符两边的数据类型可以是任意的,比如,一个字符串可以和数字相加。之所以不同的数据类型之间可以做运算,是因为JavaScript引擎在运算之前会悄悄的把他们进行了隐式类型转换的,如下是数值类型和布尔类型的相加:

结果是一个数值型!如果是在C或者Java环境的话,上面的运算肯定会因为运算符两边的数据类型不一致而导致报错的!但是,在JavaScript中,只有少数情况下,错误类型才会导致出错,比如调用非函数,或者读取null或者undefined的属性时,如下:

多数情况下,JavaScript都不会出错的,而是自动的进行相应的类型转换。比如-, *, /,和%等算术运算符都会把操作数转换成数字的,但是“+”号就有点不一样了,有些情况下,它是算术加号,有些情况下,是字符串连接符号,具体的要看它的操作数,如下:

但是,如果字符串和数字相加,会是怎样的结果呢?JavaScript会自动把数字转换成字符的,不管数字在前还是字符串在前,如下:

字符串和数字相加结果是字符串,字符串和数字相加结果是字符串,字符串和数字相加结果是字符串,重要的事情说三遍!!!!!!

此外,需要注意的是,“+”的运算方向是从左到右的,如下:

这与下面是等价的:

相比之下,下面的结果是不一样的:

但是,隐式类型转换,有时候,会隐藏一些错误的,比如,null会转换成0,undefined会转换成NaN。需要注意的是,NaN和NaN是不相等的(这是由于浮点数的精度决定的),如下:

虽然,JavaScript提供了isNaN来检测某个值是否为NaN,但是,这也不太精确的,因为,在调用isNaN函数之前,本身就存在了一个隐式转换的过程,它会把那些原本不是NaN的值转换成NaN的,如下:

上面代码,我们使用isNaN来测试后,发现字符串,undefined,甚至对象,结果都返回真!!!但是,我们总不能说他们也是NaN吧?总而言之,得出的结论是:isNaN检测NaN并不可靠!!!

JavaScript隐式类型转换(js中的隐式类型转换)

幸运的是,有一种可靠的并且准确的方法可以检测NaN。我们都知道,只有NaN是自己不等自己的,那么,我们就以使用不等于号(!==)来判断一个数是否等于自身,从而,可以检测到NaN了,如下:

我们也可以把这种模式定义成一个函数,如下:

OK,NaN的检测方法就是这么简单,我们下面继续讨论对象的隐式转换!

对象是可以转换成原始值的,最常见的方法就是把它转换成字符串,如下:

对象转换成字符串是调用了他的toSting函数的,你可以手动的调用它来检测一下:

类似的,对象也是可以转换成数字的,他是通过valueOf函数的,当然,你也是可以自定义这个valueOf函数的,如下:

如果,一个对象同时存在valueOf方法和toString方法,那么,valueOf方法总是会被优先调用的,如下:

但是,多数情况下,这都不是我们想要的,一般的,尽可能使valueOf和toString表示的值相同(尽管类型可以不同)。

最后一种强制类型转换,我们常常称之为“真值运算”,比如,if, ||, &&,他们的操作数不一定是布尔型的额。JavaScript会通过简单的转换规则,将一些非布尔类型的值转换成布尔型的。大多数的值都会转换成true,只有少数的是false,他们分别是:false, 0, -0, ”", NaN, null, undefined,因为存在数字和字符串以及对象的值为false,所以,直接用真值转换来判断一个函数的参数是否传进来了,这是不不太安全的。比如,有一个可以具有默认值得可选参数的函数,如下:

这个函数会忽略任何的真值为假的参数的,包括0,-0;

检测undefined的更加准确的方法是用typeof操作:

这种写法,可以区分开0和undefined的:

另外一种方法是利用参数跟undefined作比较,如下:

总结:

1. 类型错误有可能会被类型转换所隐藏。

2. “+”既可以表示字符串连接,又可以表示算术加,这取决于它的操作数,如果有一个为字符串的,那么,就是字符串连接了。

3. 对象通过valueOf方法,把自己转换成数字,通过toString方法,把自己转换成字符串。

4.具有valueOf方法的对象,应该定义一个相应的toString方法,用来返回相等的数字的字符串形式。

5.检测一些未定义的变量时,应该使用typeOf或者与undefined作比较,而不应该直接用真值运算。

关于JavaScript隐式类型转换就给大家介绍到这里,希望对大家有所帮助!

dedecms页面如何获取会员状态的实例代码 dedecms页面如何获取会员状态的实例代码前几天做了一个企业网站,导航栏增加了会员信息,如:已登陆:显示:欢迎会员名未登陆显示:请登录代码如

原生JS实现平滑回到顶部组件 返回顶部组件是一种极其常见的网页功能,需求简单:页面滚动一定距离后,显示返回顶部的按钮,点击该按钮可以将滚动条滚回至页面开始的位置。

通过隐藏iframe实现无刷新上传文件操作 其实在ajax出现之前,web应用也可以是无刷新的,那时大多通过IFrame来做到这一点。当然Ajax出现之后,人们一窝蜂地投奔Ajax的阵营了,iFrame就乏人问津

标签: js中的隐式类型转换

本文链接地址:https://www.jiuchutong.com/biancheng/377506.html 转载请保留说明!

上一篇:JavaScript正则表达式匹配 div style标签(js正则表达式gi)

下一篇:dedecms页面如何获取会员状态的实例代码(dedecms建站操作)

  • 个税一般劳务报酬所得如何申报
  • 法人个人账户收款是否属于公司业务
  • 资源税的计税方法自产
  • 劳保用品发放制度文件
  • 预付开发票加油后还能开吗
  • 货物运输费用怎么算
  • 接受资不抵债并账会计分录
  • 已出库未开票要交税吗
  • 做账一定要银行对账单吗
  • 结算金额和付款金额
  • 房地产企业融资存在的问题
  • 子公司的财报和母公司的财报并表吗
  • 发微信验证消息
  • 其他公司归还货款会计分录
  • 公司领导培训费怎么入账
  • 打官司败诉承担的费用
  • 房产过户的相关问题
  • 异地预缴增值税后本地还要交吗
  • 百旺税控怎么赋码
  • 税收筹划节税基金有哪些
  • 土地增值税的土地成本要扣除增值税吗
  • 小额纳税人进口增值税适用税率?
  • 暂估成本的会计处理
  • 欠税不交的后果 个人
  • 分公司是小微企业总公司是一般纳税人,如何做合并报表
  • php推送微信公众号客户消息
  • php的!
  • 现金流量科目怎么设置
  • 显示器有必要买240hz吗
  • php与jquery
  • uni-app怎么样
  • 偏食和挑食会有什么不良后果?
  • 【第十一届“泰迪杯”数据挖掘挑战赛】B题产品订单的数据分析与需求预测“解题思路“”以及“代码分享”
  • 店面装修费怎么算
  • php访问数据库的一般步骤
  • 营改增后土地增值税如何计算
  • RTX 4090深度学习性能实测奉上!模型训练可提升60~80%
  • 大学生问卷spss数据分析作业
  • php实现定时自动刷新
  • 企业所得税如何计算应纳税所得额
  • 出口退税转内销的话如何算发票金额
  • 多收钱少开票
  • php防盗链
  • php自动压缩图片
  • 结转材料成本差异所需科目
  • 股权激励如何做会计分录
  • 个人所得税申报截止时间
  • sql中聚合函数的用法
  • sql server 用法
  • 广告牌制作加盟厂家
  • 代开普通发票需提供哪些材料?
  • 应交税费年末需要结转吗
  • 如何理解事业单位处罚暂行条例中第十八条的兼职规定
  • 上一年度企业所得税汇算清缴会计分录
  • 提取坏账会计分录怎么写
  • 毛利润利润总额净利润的关系图
  • 正常在职员工的工作时间
  • 事业编制可以带计算器吗
  • windows怎么定位
  • linux vim
  • win8错误代码0xc0000001开不了机
  • SMax4.exe - SMax4是什么进程
  • mac图形界面
  • material design设计
  • win2000停止服务
  • 批处理执行bat文件
  • 安卓手机自定义ua
  • shell自定义函数以及使用
  • android 调用相机拍照
  • android 子线程间通信
  • js如何获取当前页面的url
  • JavaScript中iframe实现局部刷新的几种方法汇总
  • 详解各种汽油一吨等于多少升
  • 全国退休人员有几多人
  • 怎样纳税申报和缴纳
  • 公务员中了彩票怎么领取
  • 差旅费的补助计入哪个费用
  • 电子税务局如何查询财务报表
  • 怎样查询自己企业的税管员
  • 政府征用土地社保补偿标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设