LoginSignup
1
0

More than 5 years have passed since last update.

Javascriptで文字列同士の比較をした時の内部動作

Posted at

数値の文字列を比較した時って、自動型変換されるんじゃないの?

ユーザーの入力値を複数受け取ってそれを比較する関数を作ってました。
関数は問題なくできたので、テストを実行します。
実行したのは以下ような検証。

'10' > '5' // falseになる

なぜだ!

原因

私の勘違いでした。
「文字列とはいえ、数値を入れてるのだから数値比較してくれるだろう」と思っていたのですが・・・
片方が数値の時に型変換が発生するのであって、文字列同士の比較であれば型変換が起きるはずありません。
よく考えれば、そんな仕様破綻してますよね。

'10' > 5 // trueになる

新たな疑問

文字列比較が行われているのは分かりました。
では、なぜ5の方が大きいのか?
UTF-8のテーブルの中で、その並び順を比較するんじゃないの?

'a' < 'b' //true

// この感じで行くと、'5'より後に'10`が配置されてるから'10'の方が大きんじゃないの?

何度か検証してみて分かりましたが、文字数が複数ある文字列の比較は左から1文字づつ比較していっているようです。
文字列全体で判断していると勘違いしてました。(よく考えるとそんなわけないですよね・・・)

'a' < 'b' // true
'aa' < 'ab' // true
'aac' < 'aab' // false
'azzzzz' < 'b' // true

'1' < '2' // true
'10' < '5' // true
'60' < '5' // false

仕様を論理的に把握できていなかったと反省しました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0