美文网首页JavaScript从入门到放弃
你不行还是JavaScript不行

你不行还是JavaScript不行

作者: 菜鸟很浮夸 | 来源:发表于2018-12-06 00:40 被阅读0次

遇见了很多次,有些人在js里遇到自己想不通的问题就抱怨js是垃圾的情况。我觉得探究一下为什么比骂街好很多。

0.1 + 0.2 != 0.3

与几乎所有的脚本语言一样,js数字类型是基于IEEE 754标准来实现的,使用 “双精度” 格式,即64位二进制;更多关于 的请看这里 ;
简单来说:

  • js的数值只用64bit来表示
  • 0.1 和 0.2 这些十进制小数用二进制表示是一个无限小数(只有可以x/2^n的小数,即分母是2的倍数的小数能精确表示)
  • js会舍弃多余的部分,取一个近似值。所以小数的近似值计算反而更常见
  • 0.1 + 0.2 = 0.30000000000000004, js不能把它看成 0.3,当然也就有了 0.1 + 0.2 != 0.3

parseInt(0.0000001) == 1 而 parseInt(0.000001) == 0

parseInt在js中本来就比较奇葩,但是,这种用法也比较奇葩;
关于parseInt 简单的特点如下:

  • 作用:解析数字字符串
  • 从左到右解析,遇到非数字字符就停止
  • 第二个参数指定进制
  • 如果没有第二个参数,小心八进制和16进制(如果第一个字符是X,x转换为十六进制,如果是0转换为八进制)
  • 传一个非字符串会先转换为字符串

具体到标题的问题:0.0000001被转换成字符串时变成 "1e-7"parseInt不识别科学计数法, 不过parseFloat可以识别科学计数法。

一切皆对象

首先这是不对的;
基本类型没有.length.toString() 类似的方法,当需要的时候,js会自动为基本类型包装一个封装对象,那些属性和方法实际是通过这个封装对象来访问的。

[] == ![]

结果是 true, 这个结果之所以让很多人感到意外,因为,一种错误的直觉:== 比较会先吧两边的值转换为布尔值,然后进行比较,事情没那么简单:

  1. 先将右边的 [],转换为布尔,然后取“非”

  2. 所有对象都是真值,所以 ![] 转换为false;此时式子:[] == false

  3. == 两边类型不同,发生强制类型转换

  4. 转换的大概规则是:

    • 最终比较的是基本类型值
    • 引用类型值会通过ToPrimitive操作,转换为基本类型值
    • 最最后会转换为相同类型值比较或数值和数值的比较(而不是布尔值和布尔值比较)
  5. [] 通过ToPrimitive操作(此处实际执行的toSring()方法)得到空字符串

  6. false 会通过 ToNumber 转换为 0, 此时式子: "" == 0

  7. == 两边类型不同,发生强制类型转换,把 空串 转换为 0

  8. 0 == 0 结果为true

ToPrimitive参考:

相关文章

  • 你不行还是JavaScript不行

    遇见了很多次,有些人在js里遇到自己想不通的问题就抱怨js是垃圾的情况。我觉得探究一下为什么比骂街好很多。 0.1...

  • 创业方向不行,还是你不行?

    讲一个“有眼光”的淘宝店主的小故事。 罗辑思维在做得到应用之前业务很杂,还没找到方向,号称脚踩西瓜皮,滑到哪里算哪...

  • 是书不行还是你不行?

    2010年的某天,我路过书店,遇到一本封面很素净的书——安妮宝贝的《素年锦时》纪念版。为了这封面我把它买回家。意趣...

  • 你还是不行

    小时候的格格经常是和爷爷睡觉。睡觉前必须给她讲故事或互出脑筋急转弯题。那是在南昌的一个晚上,爷爷吃完饭就带格格姐姐...

  • 是你不行?还是你孩子不行?

    儿子同学的家长,带着孩子来理疗店调理身体,说孩子不吃饭,一个疗程下来,效果不明显,于是坐在沙发上发脾气,说一起来的...

  • 是孩子不行,还是你不行? - 草稿

    近期接到不少家长的反馈,反馈孩子的状态很游离,讲不听,打不听,课上不听,考试不行,家长很迷茫,觉得自己的孩子也无药...

  • 【职场】是行业不行,还是你不行

    今年就业形势不好,不少人找不到工作,其中有部分人吐槽,说行业饱和了,工作不好找了。 比如我在知乎上就看到过一个热门...

  • 还是不行

    成绩还是不是特别的理想。 颇撇,难过还是蛮。 嗯,不过还有时间,要加油哦。 努力奋斗!相信自己可以的。 笔芯。

  • 还是不行

    啊我控制不住我自己怎么办,还是忍不住生气,但是我好想亲亲抱抱他,安慰安慰他啊,这真的不是我本意。 我不行了,这样下...

  • 能力不行还是人品不行

    祭如在,祭神如神在。子曰:吾不与祭,如不祭。 ​祭祀时要诚心诚意,好像祖先和神灵就在眼前。我如果不够虔诚,不如不祭...

网友评论

    本文标题:你不行还是JavaScript不行

    本文链接:https://www.haomeiwen.com/subject/rotpcqtx.html