【JavaScript】"9" > "12" //true

【前言】
本系列为个人前端学习之路的学习笔记,在过往的学习过程中累积了很多笔记,如今想藉着IT邦帮忙这个平台做整理+再复习。
本系列标题一律以【】标示该篇文章主要涉及的内容,例如【JavaScript】、【Vue】等等。
若内容有误,还麻烦各路大神不吝於点出问题,感激不敬。


"9" > "12" ?

今天的主题比较小,算是一个个人学习过程中误打误撞出现的状况
在JavaScript的世界中,当我们使用比较运算子时,会回传一个结果

console.log(9 > 12); //false

在这个案例中回传false,9没有大於12,这非常好理解

但在JavaScript的世界中,存在所谓的自动转型
当型别不同的东西被放在比较运算子两边时,就会出现一些奇奇怪怪的情况
例如这个案例中,true被自动转型成1,因为1 > 0,回传true

console.log(true > 0); //true

因此我在学习的过程中通常就会去记一些重点案例,例如true会被转型成1,false会转型成0
一次偶然的情况下我遇到了这样的情况:

console.log(9 > "12"); //false
console.log("9" > "12"); //true

这就让我深感困惑了
第一行很好理解,字串"12"被转型成数字12,因此回传false
但第二行就很让人困惑了,原先以为会是两边都被转型成数字,然後因为9小於12所以回传false
但结果并非如此

"9" > "12"的原因

後来经过查找资料,终於发现原因
因为运算子在采用 > 或 < 比较字串时,运算元会透过 Unicode 编码的值来比较
所以才会有这样的情况发生

因为"9"的Unicode 编码值是57
而"12"的Unicode 编码值49
所以会变成57 > 49,自然就会回传true了


<<:  关於 物件(Object)与类别(class)

>>:  14. STM32-透过SPI驱动MCP2515实现CAN(下)

请试着把眼光对向长期......

(专案有很多种,但无关研发、纯建置或事务性的专案并不会在我讨论的范围中出现。) 个人经验是会用二分法...

Re: 新手让网页 act 起来: Day07 - Form

Form 一直都是网页中重要的功能,今天就让我们来了解在 React 处理 Form 该注意的事情吧...

Eloquent ORM - 建立 Model

表单长好之後准备来新增跟查询资料啦。 Laravel 原生有 DB 类别来帮助查询跟新增资料,像是 ...

Day09 Kibana - Query DSL 复合查询

这一个章节节我们要来介绍复合查询,当单一的查询子句无法完成需求时,为了应付这种高级查询需求,所以就产...

RISC-V: R-type 算术指令

终於进到 R-type 指令了! 指令实作已经有固定流程了,很单纯, 另外花了一点时间修改昨天的 E...