JavaScriptの小さな闇

@chomado さんとその周辺からJSの演算子まわりでちょっとした物議を醸していたので、まとめました。
5
ぬま @numa08

まじかよ・・・やばい・・・ pic.twitter.com/s2WCzxOj5C

2014-12-27 22:46:23
拡大
ちょまど🎀💻エンジニア兼漫画家 @chomado

"5"-1 →int "5"+1 →string なんでそうなるんだろ

2014-12-27 23:06:30
Mt.Shadow @shaman_univ

@chomado 文字と数値の間の演算子としての+の挙動が数値を文字に変換して結合するようになってるからかと(Javaにも似たようなのがあった気が)。

2014-12-27 23:08:12
リイナ (Riina K.) @RiinaKw

@chomado "-" は数値演算(減算)しか定義されてないが、"+" は数値演算(加算)と文字列演算(結合)の2種類が定義されてて、第一引数が文字列だから文字列演算が優先されてるのではないかと

2014-12-27 23:09:12
正庭 @masaniwasdp

@chomado たしか+演算子は文字列用のものがあるので優先的に文字列になると思います(文字列用の-演算子はない)

2014-12-27 23:09:29
いしがみまさのり( ✌︎'ω')✌︎ @masanori1102

@chomado JavaScriptの振る舞いです ja.m.wikibooks.org/wiki/JavaScrip…演算子 文字列と数値を連結すると、文字列の方が強いので数値は文字列に変換されます。

2014-12-27 23:10:12
かたしん @ktsn

@chomado マイナスは文字列に適用できないので、文字列が数字に変換されて、プラスは文字列にも適用できるので、数字が文字列に変換されるからです。

2014-12-27 23:11:13
非実在naka aki @naka_aki_spl

@chomado 文字列向けの演算子として連結の+は有るけどマイナスが割当無しなので不均衡が生じたんでしょうねー。 とはいえ、ウンザリだ、、、、

2014-12-27 23:15:48
ちょまど🎀💻エンジニア兼漫画家 @chomado

な、なるほどです💡 >RTs JavaScriptの暗黙の型変換よくわからないです…

2014-12-27 23:16:30
Deprecatad @deprecatad

JSじゃん。 JSならそれくらい普通じゃん。 JSなら。

2014-12-27 23:17:01
Deprecatad @deprecatad

@chomado JSよく知らないけど、 関数や演算子が値の型を付けると考えると 考えやすそう。

2014-12-27 23:18:11
ちょまど🎀💻エンジニア兼漫画家 @chomado

型があってないようなものであって実はある(からtoString()関数とかが存在してる)やつとかすごい大変そう

2014-12-27 23:19:46
じんぷ~ @_j6k1

@chomado それを言うとほとんどの言語にあるのでは。PHPにもJavaScriptにも型あるし

2014-12-27 23:20:38
ちょまど🎀💻エンジニア兼漫画家 @chomado

型が有って無いようで実は有る言語って、つまり、完全に「プログラマが」型を気を付けてやらなきゃいけないわけなんですよね…?

2014-12-27 23:21:05
†小野寺小咲† @srb_2

暗黙の型変換でハマる系の問題は定義を知らずに書くほうがわるいし、よく知りもせずにひどいひどい言われるのも意味不明だ

2014-12-27 23:21:05
NaOHaq(苛性ソーダ) @NaOHaq

@chomado Haskellにも deriving Show とかあるがな

2014-12-27 23:21:22
あきにゃん@巣ごもり中 @aki_hamuinu

@chomado それを完璧に理解してかつ扱えればもうプロのJavaScriptプログラマーですよ((

2014-12-27 23:22:04
正庭 @masaniwasdp

"@chomado: 型が有って無いようで実は有る言語って、つまり、完全に「プログラマが」型を気を付けてやらなきゃいけないわけなんですよね…?"だからTypeScriptとか出てる気がしますね

2014-12-27 23:22:16
じんぷ~ @_j6k1

@chomado そうなんですよね、明示的にチェックするコードを入れたり、PHPだとタイプヒンティングっていうオブジェクトや配列などにだけ使える関数、メソッドの引数限定の静的型チェックもどきを使ったり。

2014-12-27 23:22:16
ちょまど🎀💻エンジニア兼漫画家 @chomado

@NaOHaq それは型の制約を付け足せる機能?なんですよね? なんか、うーん、なんかそれとは違う気がするんです、 "5"-1 とかができちゃう、型の制約の無いもので、でも型があってっていう、 うまくいえないですヽ(;▽;)ノ

2014-12-27 23:23:38
にせれぶ @2celeb

@chomado Rubyメインですが型(クラス)があっても無くても引数や戻り値の型には気をつけるのでそれをコンパイラに依存するか実装に依存するかの違いじゃないかな?ということだと思いますね。どこでそれを担保するかの違いかな?

2014-12-27 23:23:56
ちゅーん @its_out_of_tune

@chomado 型精査する言語としない言語、どっちの方が良いかって議論はけっこうガチ勢間でも起こったりする(´・ω・`) togetter.com/li/755570

2014-12-27 23:24:21