1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JavaScriptの単項プラス演算子を知らなかったので笑えなかった人

Last updated at Posted at 2024-06-26

背景

twitterで以下のコードを見た。

('b' + 'a' + + 'a' + 'a').toLowerCase()
> "banana"

あ~NaNが関わってるやつね~!わはは!
JavaScriptあるある~!あはは!あは...ん?え?なんで?(疑問)

調査

JavaScriptは少し知っているので、NaNが関係しているジョークだとは理解できたが、真ん中あたりのプラスが NaN に置き換わるとした場合、何故 bananaa(aが2つ)を返さないのか?

と疑問に思ったため、Chromeで実際に実行してみた。

結果、以下のように + ‘a’ の部分が丸々 NaN に置き換わり、文字列化して ‘baNaNa’.toLowerCase() という出力だと理解できた。

+'a'
> NaN

では、なぜ +‘a‘ が NaN になるのか?
調べてみると、JavaScriptには単項プラス演算子、というものが存在するようだ。
5年くらい業務で書いていたが全く知らなかった。

用途は数値変換用。文字列でも変換可能なら数値に変換するとのことだが、数値に変換できない場合はNaNが返る。

+'12345'
> 12345 // 数値に変換してくれる

+'test'
> NaN // 数値に変換できないので NaN が返ってくる

単項プラスの優先度は加算より高いため先に処理される。

結論

単項プラス演算子を知っていれば笑うことができたネタだった。
一つ賢くなった。わっはっは。

('b' + 'a' + + 'a' + 'a').toLowerCase()
-> ('b' + 'a' + NaN + 'a').toLowerCase()
-> ('baNaNa').toLowerCase()
-> 'banana'

引用元

twitter.com/ryanels4/status/1805439977557225648?s=46&t=Ts9q1dl1k6E85syc_FvwxQ

参考文献

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Unary_plus
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_precedence

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?