前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个有趣又棘手的 JavaScript 示例库

一个有趣又棘手的 JavaScript 示例库

作者头像
程序员老鱼
发布2023-05-23 19:32:50
3170
发布2023-05-23 19:32:50
举报
文章被收录于专栏:前端实验室

JavaScript 是一个非常有趣的语言,但同时也充满了各种奇怪的行为。这些奇怪的行为有时会搞砸我们的日常工作,有时则会让我们忍俊不禁。

WTFJS 这个开源项目的初衷只是因为好玩。收集一些疯狂的例子,并尽可能解释它们的原理,学习以前不了解的知识。

如果你是初学者,您可以根据此笔记深入了解 JavaScript。

如果你是专业开发人员,你将从这些例子中看到人见人爱的 JavaScript 也充满了非预期的边界行为。

总之,古人云:三人行,必有我师焉。我相信这些例子总能让你学习到新的知识。

这里拿出来几个例子看一下:

1.null 是假值,但又不等于 false

尽管 null 是假值,但它不等于 false。

代码语言:javascript
复制
!!null; // -> false
null == false; // -> false

但是,别的被当作假值的却等于 false,如 0 或 ''。

代码语言:javascript
复制
0 == false; // -> true
"" == false; // -> true
2. 数组相加

如果你尝试将两个数组相加:

代码语言:javascript
复制
[1, 2, 3] + [4, 5, 6]; // -> '1,2,34,5,6'

💡 说明:数组之间会发生串联。步骤如下:

代码语言:javascript
复制
[1, 2, 3] +
  [4, 5, 6][
    // 调用 toString()
    (1, 2, 3)
  ].toString() +
  [4, 5, 6].toString();
// 串联
"1,2,3" + "4,5,6";
// ->
("1,2,34,5,6");
3. 最小值大于零

Number.MIN_VALUE 是最小的数字,大于零:

代码语言:javascript
复制
Number.MIN_VALUE > 0; // -> true

💡 说明:Number.MIN_VALUE 是 5e-324,即可以在浮点精度内表示的最小正数,也是在该精度内无限接近零的数字。它定义了浮点数的最高精度。

现在,整体最小的值是 Number.NEGATIVE_INFINITY,尽管这在严格意义上并不是真正的数字。

— StackOverflow 上的“为什么在 JavaScript 中 0 小于 Number.MIN_VALUE?”

https://stackoverflow.com/questions/26614728/why-is-0-less-than-number-min-value-in-javascript

4. true 和 false 的数学运算

做一下数学计算:

代码语言:javascript
复制
true + true; // -> 2
(true + true) * (true + true) - true; // -> 3

嗯……🤔

💡 说明:我们可以用 Number 构造函数将值强制转化成数值。很明显,true 将被强制转换为 1 :

代码语言:javascript
复制
Number(true); // -> 1

一元加运算符会尝试将其值转换成数字。它可以转换字符串形式表达的整数和浮点数,以及非字符串值 true、false 和 null。如果它不能解析特定的值,它将转化为 NaN。这意味着我们可以有更简便的方式将 true 转换成 1:

代码语言:javascript
复制
+true; // -> 1

当你执行加法或乘法时,将会 ToNumber 方法。根据规范,该方法的返回值为:

如果参数是 true,返回 1。如果参数是 false,则返回 +0。

因此我们可以将布尔值相加并得到正确的结果

5. 三个数字的比较
代码语言:javascript
复制
1 < 2 < 3; // -> true
3 > 2 > 1; // -> false

💡 说明:为什么会这样呢?其实问题在于表达式的第一部分。以下是它的工作原理:

代码语言:javascript
复制
1 < 2 < 3; // 1 < 2 -> true
true < 3; // true -> 1
1 < 3; // -> true

3 > 2 > 1; // 3 > 2 -> true
true > 1; // true -> 1
1 > 1; // -> false

我们可以用 大于或等于运算符(>=):

代码语言:javascript
复制
3 > 2 >= 1; // true

了不起只是列举了几个例子,现在开发各种工具、三方库,很多人特别是刚入门的小伙伴对于这些基础技能还真是没仔细了解过,这个项目收集一些JavaScript的例子,并尽可能解释它们的原理,值得看看学习一下。

项目地址:https://github.com/denysdovhan/wtfjs

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-03-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.null 是假值,但又不等于 false
  • 2. 数组相加
  • 3. 最小值大于零
  • 4. true 和 false 的数学运算
  • 5. 三个数字的比较
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档