首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一个有趣又棘手的 JavaScript 示例库

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

作者头像
程序员老鱼
发布于 2023-05-23 11:32:50
发布于 2023-05-23 11:32:50
37200
代码可运行
举报
文章被收录于专栏:前端实验室前端实验室
运行总次数:0
代码可运行

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

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

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

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

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

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!!null; // -> false
null == false; // -> false

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
0 == false; // -> true
"" == false; // -> true
2. 数组相加

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[1, 2, 3] + [4, 5, 6]; // -> '1,2,34,5,6'

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
true + true; // -> 2
(true + true) * (true + true) - true; // -> 3

嗯……🤔

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Number(true); // -> 1

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+true; // -> 1

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

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

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

5. 三个数字的比较
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 < 2 < 3; // -> true
3 > 2 > 1; // -> false

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
3 > 2 >= 1; // true

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

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Hive metastore源码阅读(三)
  上次写了hive metastore的partition的生命周期,但是简略概括了下alter_partition的操作,这里补一下alter_partition,因为随着项目的深入,发现它涉及的地方较多,比如insert into 时如果路径存在情况下会调用alter_partition,调用insert overwrite语句时,也会调用该方法,
用户3003813
2018/09/06
1.2K0
Hive metastore源码阅读(二)
  最近随着项目的深入,发现hive meta有些弊端,就是你会发现它的元数据操作与操作物理集群的代码耦合在一起,非常不利于扩展。比如:在create_table的时候同时进行路径校验及创建,如下代码:
用户3003813
2018/09/06
1.4K0
Hive metastore源码阅读(一)
  不要问我为什么,因为爱,哈哈哈哈。。。进入正题,最近做项目顺带学习了下hive metastore的源码,进行下知识总结。
用户3003813
2018/09/06
3.2K0
Hive metastore源码阅读(一)
元数据管理|Hive Hooks和Metastore监听器介绍
元数据管理是数据仓库的核心,它不仅定义了数据仓库有什么,还指明了数据仓库中数据的内容和位置,刻画了数据的提取和转换规则,存储了与数据仓库主题有关的各种商业信息。本文主要介绍Hive Hook和MetaStore Listener,使用这些功能可以进行自动的元数据管理。通过本文你可以了解到:
Spark学习技巧
2020/09/08
2.5K0
元数据管理|Hive Hooks和Metastore监听器介绍
用ranger对hive metastore 进行授权管理
hive standalone metastore 3.1.2可作为独立服务,作为spark、flink、presto等服务的元数据管理中心,然而在现有的hive授权方案中只有针对hiveserver2的授权,所以本文针对hive standalone metastore独立服务使用ranger对连接到hive metastore的用户进行授权访问,以解决hive standalone metastore无权限验证问题。
从大数据到人工智能
2022/01/15
1.9K0
用ranger对hive metastore 进行授权管理
通过Java API获取Hive Metastore中的元数据信息
在文章中,我们说到Hive 3.0.0版本开始,其单独提供了standalone metastore服务以作为像presto等处理引擎的元数据管理中心。
从大数据到人工智能
2022/01/19
3.2K0
windows 11系统调试hive metastore 3.1.2源码新姿势
由于工作原因,需要深入了解一下hive metastore相关源码,这几天尝试了在windows中运行hive metastore代码,这边记录一下踩坑的过程以及解决方法。
从大数据到人工智能
2022/03/22
1.2K0
windows 11系统调试hive metastore 3.1.2源码新姿势
使用hive客户端java api读写hive集群上的信息
上文介绍了hdfs集群信息的读取方式,本文说hive 1、先解决依赖 <properties> <hive.version>1.2.1</hive.version> </properties> <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>${hive.version}</ve
用户1225216
2018/03/05
4K0
Hive metastore表结构设计分析
  今天总结下,Hive metastore的结构设计。什么是metadata呢,对于它的描述,可以理解为数据的数据,主要是描述数据的属性的信息。它是用来支持如存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录。为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。
用户3003813
2018/09/06
1.9K0
Hive metastore表结构设计分析
MySQL 到 TiDB:vivo 的 Hive Metastore 横向扩展之路
本文介绍了 vivo 在大数据元数据服务横向扩展道路上的探索历程,由实际面临的问题出发,对当前主流的横向扩展方案进行了调研及对比测试,通过多方面对比数据择优选择 TiDB 方案。同时分享了整个扩展方案流程、实施遇到的问题及解决方案,对于在大数据元数据性能上面临同样困境的开发者本篇文章具有非常高的参考借鉴价值。
PingCAP
2023/10/30
4320
kafka-connect-hive sink插件实现要点小结
kafka-connect-hive sink插件实现了以ORC和Parquet两种方式向Hive表中写入数据。Connector定期从Kafka轮询数据并将其写入HDFS,来自每个Kafka主题的数据由提供的分区字段进行分区并划分为块,每个数据块都表示为一个HDFS文件,文件名由topic名称+分区编号+offset构成。如果配置中没有指定分区,则使用默认分区方式,每个数据块的大小由已写入HDFS的文件长度、写入HDFS的时间和未写入HDFS的记录数决定。
九州暮云
2019/08/21
1.3K0
Hive&nbsp;V1.2.1源码的解译
在利用spark sql on hive的过程中,访问Mysql总是报错,其报错的日志总是显示:
sparkexpert
2022/05/07
2900
Hive MetaStore 在快手遇到的挑战与优化
导读:快手基于Hive构建数据仓库,并把Hive的元数据信息存储在MySql中,随着业务发展和数据增长,一方面对于计算引擎提出了更高的要求,同时也给Hive元数据库的服务稳定性带来了巨大的挑战。本文将主要介绍Hive MetaStore服务在快手的挑战与优化,包括:
create17
2021/04/07
1K0
Hive MetaStore 在快手遇到的挑战与优化
hive metastore配置kerberos认证
hive从3.0.0开始提供hive metastore单独服务作为像presto、flink、spark等组件的元数据中心。但是默认情况下hive metastore在启动之后是不需要进行认证就可以访问的。所以本文基于大数据组件中流行的kerberos认证方式,对hive metastore进行认证配置。
从大数据到人工智能
2022/01/18
1.3K0
hive metastore配置kerberos认证
Hive的安装与使用-1
1.下载tar包,在客户端窗口上执行 wget -c http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz 2.解压到app目录下 tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app 3.配置~/.bash_profile export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0 export PATH=$HIVE_HOME/bin:
sparkle123
2018/04/26
8520
Hive的安装与使用-1
Hive基础学习
假设我们现在建立一张student表,它有两个字段,id(int)和name(string)。
超哥的杂货铺
2019/12/18
7100
Hive基础学习
Hive学习-数据定义语句
1)存储位置:Hive的数据存储在Hadoop上,而像MySQL这样的关系型数据库将数据存储在设备或本地系统中。
顾翔
2024/09/10
4450
Hive学习-数据定义语句
hive_异常_01_(未解决)FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask.
单独的 hadoop、hbase 、hive 都是正常的,但是在 hive 整合hbase 时,在 hive中输入以下建表语句,
shirayner
2018/08/10
1.5K0
【Hive】ERROR exec.DDLTask: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nati...
1/在$HADOOP_HOME/lib/native下面放了2.5.0-native-snappy.tar.gz,这是HDFS存储压缩所需的本地lib包。 cd ~/app/hadoop-2.5.0-cdh5.3.6/lib/native/
sparkle123
2018/07/25
9880
Flink源码分析之深度解读流式数据写入hive
前段时间我们讲解了flink1.11中如何将流式数据写入文件系统和hive [flink 1.11 使用sql将流式数据写入hive],今天我们来从源码的角度深入分析一下。以便朋友们对flink流式数据写入hive有一个深入的了解,以及在出现问题的时候知道该怎么调试。
大数据技术与应用实战
2020/09/15
3.2K1
相关推荐
Hive metastore源码阅读(三)
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档