JavaScript中的特殊运算,一些有趣的js等式

时间: 2017-12-07阅读: 1648标签: js知识

你可以打开你的Chrome开发者控制台,windows用户按住 Ctrl + Shift + J,Mac用户按Cmd + Option + J打开控制台。这会允许你再你的浏览器里输入下面所有的代码,所以你可以实时的看到发生什么了。


3 + true == 4

我也没有开玩笑,在JavaScript中,当加号操作符放在number 和 boolean这两个类型的值之间的时候,boolean类型的值将会转化成number类型的值。

如果你还记得我之前的JavaScript Showdown这篇文章,false == 0 和 true == 1,记得这个的话,3 + true 就转化成 3 + 1,然后我们就会得到4这个答案了。


true + false

这个跟上面的例子是一个逻辑。当加号操作符放在两个booleans值之间的时候,这两个booleans值都会转化成numbers类型的值,因此true + false 就转化成 1 + 0,然后我们就得到1这个答案了。


‘4’ + 8

那当我们把一个string类型的数字加上一个真的number类型的数字会发生什么呢?当加号操作符被放在两个操作数之间的时候,一个数是string类型的一个字符串,那么它会把其它 number 或者 boolean转化成字符串然后用字符串连接它们。

从这个逻辑看:'4' + 8 变成 '4' + '8' 然后我们就得到 '48'这个答案了


true + ‘4’

和上面的例子相似,JavaScript将会把boolean类型的值转化成string类型的值然后进行字符串连接。这会变成'true' + '4',结果就变成'true4'。


1 + 1 + ‘1’

操作符的顺序很重要,在这个例子中,JavaScript认为第一个+优先级比其它的优先级高:1 + 1 就等于 2了。然后我们继续,再加上一个string类型的值'1'。多个数相加级联的结果是'21'

这里有事件链:

1 + 1 + '1'
  2   + '1'
       '21'


‘1’ + 1 + 1

当我们把字符串类型的值放在最前面会有什么改变呢?记住操作符的顺序并且从左到右相加。

'1' + 1 + 1
   '11' + 1
       '111'

string + number = string,因此在这里例子中我们得到了一个长字符串'111'。


-‘69’ + 69

如果我们尝试在string前面加上一个负号然后再加上一个number类型的值呢?你现在应该知道,如果没有这个负号,我们的答案将会是'6969',然而,这个负号改变了这个结果。

在'69'之前的减号是一个一元操作符,事实上它会把string 转化成 number类型并且把它变成负数。因此我们的等式就变成-69 + 69,它等于0。


-‘giddyup’ + 409

那如果我们的一元操作符是在一个字符串前面,并且这个字符串不能转化成一个数会怎么样呢?当JavaScript在生成数字失败的时候,我们会得到NaN (Not A Number不是一个数字)这个值。

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/233

document.write和innerHTML的区别

document.write只能重绘整个页面,innerHTML可以重绘页面的一部分。 document.write是直接写入到页面的内容流,如果在写之前没有调用document.open, 浏览器会自动调用open。

base91 for javascript

原理和 base64 是一样的,ASCII 共有94个可打印字符,base64 使用了其中 64 个,base91 使用了 91 个。

window.location.href的用法(动态输出跳转)

javascript中的location.href有很多种用法,window.location.href 语句可以实现一个框架的页面在执行服务器端代码后刷新另一个框架的页面

适配器在JavaScript中的体现

适配器设计模式在JavaScript中非常有用,在处理跨浏览器兼容问题、整合多个第三方SDK的调用,都可以看到它的身影。适配器模式是一种软件设计模式,允许从另一个接口使用现有类的接口。它通常用于使现有的类与其他类一起工作,而无需修改其源代码。

为什么JavaScript开发如此疯狂

Web开发中其他一切对你而言都是小菜一碟,但当你深入探究JavaScript的时候,不免有一种“众人皆醒你独醉”的悲壮——好像其他人都知道你不知道的一些大的基础的知识内容,并且这些内容可以帮助你理解所有知识

前端与编译原理——用JS写一个JS解释器

说起编译原理,印象往往只停留在本科时那些枯燥的课程和晦涩的概念。作为前端开发者,编译原理似乎离我们很远,对它的理解很可能仅仅局限于“抽象语法树(AST)”。但这仅仅是个开头而已。编译原理的使用,甚至能让我们利用JS直接写一个能运行JS代码的解释器。

JS 中的垃圾回收

对于开发者来说,JavaScript 的内存管理是自动的、无形的。我们创建的原始值、对象、函数……这一切都会占用内存。当某个东西我们不再需要时会发生什么?JavaScript 引擎如何发现它、清理它?

你不知道的 js 保留字

先是笼统的说一下有什么保留字,保留字的话根据犀牛书的划分,可有分为以下几类:基础保留字、严格模式下的保留字、严格模式下的不完全保留字、ECMAScript3的保留字、ECMAScipt 5 的保留字、全局变量和函数

前端基础之BOM和DOM

JavaScript分为 : ECMAScript,DOM,BOM。BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。DOM (Document Object Model)是指文档对象模型

js中async与defer

async 异步加载,立即下载,不应妨碍页面其他操作,标记为 async 的异步脚本并不保证按照指定的先后顺序执行,用async很容易出错,async 是无序执行,自身加载完就会执行;

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!