最近在学习的途中发现了javascript中一些有趣又不理解的特性,于是乎就发出来和大家一起分享分享。这些看似不理解的东西其实和我们的基础相关,于是就好好的查找资料,本着加强基础的想法把这些东西弄得。当然这里面还有好多一知半解和一些根本不知道的,希望有大佬可以解释一下

看着这些有没有一种被欺骗的感jio,为什么输入9999999999999999得到的是10000000000000000,为什么0.5+0.1==0.60.1+0.2就不等于0.3了,还有最奇怪的是[] == ![]

不急~~~,让我们来冷静分析。

1、typeof NaN

其实这是一个很简单的题目,NaN是一种特殊的number。通常都是在计算失败时,作为 Math 的某个方法的返回值出现(例如:Math.sqrt(-10)),或尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("aaa"))。并且注意NaN == NaNfalse,但是我们可以用Object.is()方法来判断两个值是否相等;

2、9999999999999999

javascript中只有一种数值类型(number),javascript没有真正意义上的整数,整数就是不带没有小数的十进制数,产生这种原因是因为javascript在计算的时候会有浮点数误差。

3、0.1 + 0.2 !== 0.3

javascript中的数字类型是基于IEEE 754标准来实现的,该标准也通常被称为“浮点数”,由于在二进制浮点数中0.10.2并不是十分精确,所以0.1+0.2不等于0.3。但是我们可以使用Number.EPSILON(),来判断两个数是否在机器精度的误差范围内。 点击这里了解更详细

4、Math.max()&Math.min()

  • Math.min() 返回了 Infinity,这个值对应了 Number.POSITIVE_INFINITY 常量。
  • Math.max() 返回了-Infinity,这个值对应了Number.NEGATIVE_INFINITY 常量。

我真的也不知道为什么(脑壳痛),这两个方法在我们平常的使用中都会传入至少两个参数,但是如果不传参数就会返回这样的结果,真让人摸不着头脑,就算抛出个错误感觉也比这样要好一些。

5、[] !== [] but [] == ![]

  • [] !== [],因为数组是引用值,当我们创建了两个数组的数组的时候,它们的指针指向堆中的内存空间不相同所以不相等。
  • [] == ![],这看起来似乎有点疯狂,因为!的优先级高于==所以先进行![]的转换,可将变量转换成布尔类型,nullundefinedNaN以及空字符串('')取反都为true,其余都为false,所以[] == ![]变为[] == false,所以[] == ![]

6、[] + {} = "[object Object]"

这里的,{}出现在+运算符表达式中,{}被当作一个空对象来处理,{}会被强制转换为"[object Object]"[]会被强制转换为"",所+执行字符串拼接操作结果为"[object Object]"

7、{} + [] = 0

这里的{}有些不同,它会被当作一个代码块来处理,所以最后的结果相当于执行+[],然后[]被强制转换为0; 最后转换的代码如下:

{}
+[]
复制代码

8、91 - '1' & 9 + '1'

  • 91 - '1':这里-先将'1'强制转换为1,然后再执行数值的相减操作
  • 9 + '1':这里执行的是字符串拼接操作

9、parseInt(1/0, 19)

因为1/0的结果是Infinity,所以parseInt(1/0, 19)相当于parseInt('Infinity', 19),因为第一个字符是'I',以19为基数时值为18

10、typeof a

虽然这里的a还没有被定义但是typeof a 的返回结果任然是undefined,着也许是JavaScript设计的一个缺陷,在ES6之前typeof是一个绝对安全的操作,因为不会抛出错误,但是再ES6之后意味着typeof不是绝对安全的操作了:

可以看到在在在用声明该变量之前就使用该变量会抛出一个错误,因为let声明的变量存在一个暂时性死区。

11、NaN !== NaN

这也许是javascript中唯一一个自身不等于自身的值了,但是可以通过Object.is(NaN,NaN),来判断,最后得到的结果是true。

12、.42 == 0.42

因为JavaScript中规定小数点前面的0可以省略。相信大家在CSS中也用过,transition: width .2s

13、[1][0] == 1

这里相当于把[1]看作一个数组,然后取它的第0项的值。 相当于:

let arr = [1]
arr[0]
复制代码

14、== & ===

==允许在相等比较中进行强制类型转换,而===不允许。所以true == 1 结果为true true===1结果为false

由于本人才疏学浅,肯定有表述不是很正确的地方,敬请各位斧正。

JavaScript君,请您坦诚相待~~~相关推荐

  1. python模拟访问js_python模拟http请求,返回“浏览器不支持javascript,请设置您的浏览器开启javascript支持”...

    需求 写一个可以自动获取"腾讯微博开发平台"申请中的oauth_verifier参数值的脚本. 正常情况下,需要人工从浏览器地址栏复制oauth_verifier的值,这个可以模拟 ...

  2. 从点点点到年薪30W的心理历程--测试君请进,绝对让你不虚此行!

    一.前言:人生感悟 人生,就是一个苏醒的过程,生命就是一次历练,从鲜衣怒马,到银碗里盛雪,从青葱岁月到白发染鬓,人总是会在经历中成长,在成长中懂得,在懂得里看透,看透而不说透,从而一步一步的走向成熟, ...

  3. 滴,这周的福利已掉落,镁客君请你免费骑摩拜

    一起骑车去浪! 昨天周五,按惯例我们是要送福利的 但是,我们运营跑了. 然后,我就被临时拉来给大家送福利. 这次我们送的东西比较特殊. 它能让你在国庆节, 完全没有堵车烦恼, 享受飞一般自由. 比如在 ...

  4. JavaScript入门-第1章 请做好准备

    JavaScript入门 1-1  为什么学习JavaScript 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部 ...

  5. 前端开发之JavaScript基础篇一

    主要内容: 1.JavaScript介绍 2.JavaScript的引入方法和输出及注释 3.javaScript变量和命名规则 4.五种基本数据类型 5.运算符 6.字符串处理 7.数据类型转换   ...

  6. JavaScript基础,Cookies,Sessions

    php和JavaScript,掌握JavaScript基础,自定义函数,流程控制语句,事件,调用JavaScript脚本,在PHP中使用JavaScript. JavaScript是网景公司开发的,是 ...

  7. 是否有标准函数检查JavaScript中的null,undefined或空白变量?

    是否有通用的JavaScript函数可检查变量是否具有值并确保其undefined或为null ? 我有以下代码,但是不确定是否能涵盖所有情况: function isEmpty(val){retur ...

  8. ppk on JavaScript第二章:背景(完结篇)

    无障碍规则 尽管无法预见可能损害一个有脚本网站的可用性的所有情形,但我已经总结出一些可以帮助您在基础上不犯错的规则.不要把它们当作JavaScript和无障碍的终极规则,这只是能防止一些常见低级错误的 ...

  9. 61计蒜客 动态规划基础 蒜头君的城堡之旅

    题目: 蒜国地域是一个 n 行 m 列的矩阵,下标均从 1 开始.蒜国有个美丽的城堡,在坐标 (n,m) 上,蒜头君在坐标 (1,1) 的位置上.蒜头君打算出发去城堡游玩,游玩结束后返回到起点.在出发 ...

最新文章

  1. 一个简单的blog系统(九) 增加标签和标签页面
  2. mysql delete limit用法_你习惯delete语句后带上limit吗
  3. CF438E:The Child and Binary Tree(生成函数)
  4. async,await
  5. Java 按行读写文件(解决中文乱码)
  6. 【BZOJ4108】[Wf2015]Catering 有上下界费用流
  7. 逗号后面统一加空格_十分钟搞定字幕,教你做加字幕的“快手菜”
  8. git修改文件名大小写的方法。
  9. 机器学习实战之Logistic回归
  10. 我的Oracle 9i学习日志(11)--重做日志文件及练习
  11. c 语言编写个人所得税程序,C语言编写一个计算个人所得税的程序,要求输入收入金额,能够输...
  12. 程序员代码面试指南:IT名企算法与数据结构题目 PDF 版
  13. 啊哈算法(python)
  14. mysql打开数据库的sql语句_数据库MySQL——SQL语句(命令)
  15. 动态规划(一)——矩阵连乘
  16. 开帖记录每天工作学习日常
  17. 中国各个朝代的历史地图
  18. 一篇文章搞定Redis Stream
  19. 微信没有回车键怎么换行_微信打字怎么换行
  20. Linux下重启磁盘盘符会变,linux系统 重启盘符错乱问题

热门文章

  1. Android 退出应用程序
  2. android studio 新建函数注释模板
  3. C语言头文件、库文件的查找路径
  4. 4.02Day12函数 装饰器
  5. Tensorflow生成自己的图片数据集TFrecords(支持多标签label)
  6. 工厂方法模式与抽象工厂模式
  7. 解决新浪微盘下载没反应下载中断
  8. kotlin集合操作符——总数操作符
  9. Hadoop初级之Hadoop基本概念与应用前景
  10. Java 语法糖详解