JavaScript的规则类怪谈

120 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

亲爱的开发者,欢迎你使用世界上最受欢迎的JavaScript语言。我们拥有丰富的使用场景和功能,无论是前端后端、大数据、机器学习、图像处理,我们保证为每一种使用场景打造它们适宜的环境,希望您的开发工作可以轻松愉快!在进行开发时,请各位开发者务必遵守以下规则,以确保代码的安全,否则后果自负。

  1. 类型转换总是不期而遇的,你的四则运算符总会让一些事情发生不那么客观的结果(尽可能转化数字),如果遇到了,请及时避开,如果无法回避,记下来它,不要反驳,不要反驳,不要反驳
true + false; // 结果是1 因为Number(true) + Number(false) = 1 + 0 = 1
undefined + false; // 结果是NaN 因为Number(undefined) = NaN
  1. 你看到的小数也许不是你认知中的小数,浮点数会夺取它的灵魂,即使它们看起来是那么的相似。在特别的场景下,它会露出马脚:
0.1 + 0.2 === 0.3; // 结果是false

由于浮点数精度问题,0.1+0.2实际上得到的不是0.3,而是0.30000000000000004,具体的原因和解决办法可以参考这篇文章:JS中浮点数精度问题

  1. 当你见到一个空值时,你可以将其理解为false,但对象和数组除外:
Boolean(""); //false
Boolean(null); //false
Boolean(undefined); //false
Boolean(NaN); //false

Boolean({}); //true
Boolean([]); //true
Boolean(new Boolean(false)); //true
  1. 在无限的尺度上,任何曾经看起来翻天覆地的变化,都显得那么微不足道:
Math.pow(10,1000) === Math.pow(10,1000000000);//true 因为二者结果都是Infinity
  1. 在以下情况出现的时候,请忽略第一条,并努力将所有元素转化为字符串,哪怕它是那么的像数字,哪怕转换回来的字符串意义不明:
  • 使用加号+
  • 任意一端出现字符串
1 + "1";// "11"
null + "1";// "null1"
undefined + "1"; // "undefined1"

切记!只有+出现才要遵循第5条,减号-等其他运算符仍需遵守第一条:

1 - "1";// 0
null - "1";// -1
undefined - "1"; // NaN 因为Number(undefined) = NaN
  1. 在一些情况下,“我是我”并不能够成立,但希望你依然可以坚定信念,找寻到真正的自我:
NaN == NaN; //false

这是由于 IEEE-754 委员会出于一些原因做出的决定,,但是你仍然可以通过下面这两个方式来判断NaN

isNaN(NaN); //true
Object.is(NaN,NaN); //true
  1. 有时候,更加直接的表达更不容易出错,函数是这样,人生也是这样:
// 函数声明
fun(); // ok
function fun() {}

// 函数表达式
fun(); // Uncaught TypeError: fun is not a function
var fun = function() {}

这是因为函数声明会在当前作用于的代码之前执行完毕,而函数表达式只有在真正遇到这段代码的时候才会执行

只要遵守以上规则,您就会拥有一个愉快JavaScript开发旅程!您将收获数不尽的快乐和知识!遵守规则,注意安全,祝您和您的代码玩的开心!