JavaScript 4©2ch.net

2014/12/05(金) 12:19:07.19ID:fmzBASgG
( ^ω^) 初学者・迷子・ロリ幼女はこちらで
  _、_
( ,_ノ` ) プロフェッショナルはECMAScript デス 4へ

【前スレ】
JavaScript 3
http://peace.2ch.net/test/read.cgi/tech/1380177260/

【関連スレ】
ECMAScript デス 4
http://peace.2ch.net/test/read.cgi/tech/1325448978/
+ JavaScript の質問用スレッド vol.117 +
http://peace.2ch.net/test/read.cgi/tech/1404146244/
CoffeeScript
http://peace.2ch.net/test/read.cgi/tech/1320949260/
TypeScript part1
http://peace.2ch.net/test/read.cgi/tech/1349187527/
構造化ウェブプログラミング言語Dart2
http://peace.2ch.net/test/read.cgi/tech/1319388343/
Microsoft SkyDrive API
http://peace.2ch.net/test/read.cgi/tech/1385604796/
【MACRO】Google Apps Script 質問スレ【DRIVE】
http://peace.2ch.net/test/read.cgi/tech/1404007623/
【node.js】サーバサイドjavascript 2【Rhino】
http://peace.2ch.net/test/read.cgi/tech/1358937029/
2014/12/05(金) 12:20:14.04ID:fmzBASgG
【前スレ-2】

JavaScript ライブラリ総合質問所 vol.4
http://peace.2ch.net/test/read.cgi/hp/1400834117/
Node.js + Express
http://kanae.2ch.net/test/read.cgi/php/1357402658/
【MVW】AngularJS {{2}}【Google】 [転載禁止]©2ch.net
http://kanae.2ch.net/test/read.cgi/php/1415599223/
enchant.js
http://peace.2ch.net/test/read.cgi/gamedev/1352393326/
むしろjavascriptでゲーム作ろうぜ
http://peace.2ch.net/test/read.cgi/gamedev/1048171505/
2014/12/05(金) 12:22:14.63ID:fmzBASgG
ああ、間違った。
>>2 は関連スレ-2です。

次スレは>>980あたりでお願いします。
2014/12/05(金) 12:28:49.65ID:S74tDLHo
板毎の整理までして戴いて超GJでござる
5デフォルトの名無しさん
垢版 |
2014/12/05(金) 14:51:01.34ID:v8ZX4BwT
               ノ      ゚.ノヽ  , /}      ...
            ,,イ`"     、-'   `;_' '    ..::::::::::::::...
   ,-、  _.._   (        (,(~ヽ'~     ..:::::::::::::::::::::::
 )'~  レー'  〉   ヽ       i`'}       .:::::::::::::::::::::::
 ~つ     '-ー、  i       | i'     ...:::::::::::::::::::::::
 /       <  /     。/   !  ......:::::::::::::::::::::::::    これは>>1乙じゃなくて
/         ~^´     /},-'' ,●::::::::::::::::::::::::::::::::::::
i、        ,i' _,,...,-‐-、/    i  ::::::::  .:::::::::::::
..ゝ        <,,-==、   ,,-,/      .:::::::::::            放射能がうんたら
 )       {~''~>`v-''`ー゙`'~       ..:::::::::                          ........::.
 {        レ_ノ            ..::::::::.                         ......:::::::::
ノ         ''           ..:::::::                        ...::.:...:::::::::
                     .:::::::::                     ...:......:::::::::::: .
                    .:::::::::::.        .....      ..  ..::::::::::::::::::::::::   :::.
                    ::::::::::::::::.::::::....:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::.. ::  ::..
                    .:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :::    ::.
                    ::::::::::::::::: :::::::::::::::::::::::::::::: :::::
                          .::    ::.  :::
2014/12/05(金) 20:23:41.06ID:JcHTtYO/
http://i.imgur.com/SduT7qR.jpg
http://i.imgur.com/2f8fP3F.jpg
http://i.imgur.com/u0ymg8c.jpg
http://i.imgur.com/LruEssT.png
http://i.imgur.com/AeSQqRT.jpg
http://cisburger.com/up/bnf/6016.jpg
http://up.pangya.tv/src/www_pangya_tv18594.jpg
2014/12/05(金) 20:48:53.50ID:+TXyzC2W
ここはJavaScript4のスレです

http://ja.wikipedia.org/wiki/ECMAScript#ECMAScript_4

ECMAScript 4

「JavaScript#JavaScript 2.0」も参照
ECMAScript 4 は過去2回仕様作成が挑戦されたが、仕様がまとまらず、失敗に終わっている。
1回目[編集]
2000年〜2003年ごろ行われた。主に、旧Netscape社とMicrosoft社によって行われたが、意見がまとまらずに、打ち切りとなった。この時の案は ActionScript へと引き継がれた。
http://www.mozilla.org/js/language/old-es4/ - 昔のNetscape草案
2回目[編集]
2007年〜2008年ごろ、2回目の仕様作成が行われた。大きく機能を追加される予定であったが、意見がまとまらず、2008年8月13日に、小規模の改善にとどまる、ECMAScript 3.1 を進めることとなった[3]。仕様は、http://www.ecmascript.org/docs.php にて公開されている。
以下のような予定があった。
大規模・大人数開発のための機能の追加[要出典]
型に関する機能の追加[要出典]
ジェネリックプログラミングの機能の追加
ECMAScript 3 が下位互換だが、互換でない仕様が一部に入る[要出典]
ActionScript 3 の上位互換だが、互換でない仕様が一部に入る[要出典]
2014/12/06(土) 00:47:10.87ID:katyEhxk
いやいやいやいやいやいやいやいやいやいや、

ただのPart 4ですからー残念!
2014/12/06(土) 00:52:42.22ID:katyEhxk
>>2
そういやWeb制作板の方にも質問スレがあったんだった。

+ JavaScript の質問用スレッド vol.121 +©2ch.net
http://peace.2ch.net/test/read.cgi/hp/1415213701/

そして>>6は一体どこの誤爆?
2014/12/06(土) 13:37:22.95ID:ERRenF6X
ろ・ろ・ろりようじょちゃうわっ!
2015/01/22(木) 21:05:26.72ID:lh8u5jbd
lodash 3.0 リリース間近!

https://github.com/lodash/lodash
3.0-preから-preが外れました!


スレが多すぎてどこに書けばいいかわからないので
関連スレすべてにマルチポストしています。m(__)m
2015/01/23(金) 04:56:10.36ID:Hr76SqrY
せっかく貼ってもらって恐縮だが
ここは関連してない
13デフォルトの名無しさん
垢版 |
2015/01/28(水) 16:27:09.57ID:8HD8W7Zv
フェラチオ
14デフォルトの名無しさん
垢版 |
2015/02/11(水) 21:37:34.73ID:z1YCt8TB
http://www.mpi-sws.org/~rossberg/papers/JSExperimentalDirections.pdf

GoogleはJSに「新モードを追加する」という方向性に舵をきり始めた。
GoogleはSaneScript、SaneModeをV8上に今年上半期に実装する。
これはJSの機能を一部制限し、動作を変えることで強力な最適化を可能にする。
語弊を恐れずに言うと、asm.jsの発展版であり、
asm.jsがJSの10%の機能、ユースケースをターゲットにしたものなら、Saneは90%程度だ。

そして今年下半期にはSaneとシンクロする型システムを導入し、SoundScriptとなってharmonyの次の音色をJSにもたらす。
JSは静的&動的型付け、クラス&プロトタイプベース言語となってあらゆる人々の要求に答える言語へと成長する。
それは遠い未来の話ではない。1年の間にその変化が起こるのだ。
2015/02/11(水) 21:46:25.26ID:fVfIbgvg
つまり標準化をやめてオレオレ拡張するってことか
2015/02/11(水) 21:51:27.65ID:nRKk5Oa4
よくわかんないけどウェブプログラマがIEを恨む時代からChromeを恨む時代になる?
17デフォルトの名無しさん
垢版 |
2015/02/11(水) 21:54:42.46ID:z1YCt8TB
違う。これを発表したのはまさにTC39Meetingでだ。
だからGoogleはこれがES7あたりで標準になることを望んでいる。
O.oのときと同じく先行実験をするということ。

しかしJSが徐々に「Living Standerd」化していってるのは否定しない。
これは良い悪いではなく抗えない時代の流れなのだと思う。
そういえばこれと同じようにMozilla陣営が実験を進めていたParallelsは、
共感が少ないということで白紙に戻ったそうだ。

この取り組みが成功し、標準になるかどうかは結局は我々開発者の評判次第ということだ。
18デフォルトの名無しさん
垢版 |
2015/02/11(水) 22:07:33.80ID:z1YCt8TB
皆はasm.jsを手書きで書こうとして詰まったり、思ったよりパフォーマンスが上がらなかったことはないだろうか。
Saneなら違う。SaneはほぼJSの感覚で手で楽にかけるし、パフォーマンスだけでなくリーディングの面でも素晴らしい効果をもたらす。
問題はこのJSにモードを増やすという考え方が、開発者たちにとって歓迎されるかどうかだ。

このasm.jsについてのissueを見てほしい。
https://code.google.com/p/v8/issues/detail?id=2599
10でも多いレス数は80。100で大人気のスター数は630。
当初Googleはasm.js向けの最適化はしないと言っていたのが徐々に主張が変わり、
今では新最適化エンジンで"use asm"を認識し、最適化モードを切り替えられるようにしたほどである。
今回の"use sane"アイディアはこういったことから開発者の受けがいいと判断してのことだろう。
2015/02/11(水) 22:19:43.31ID:TfFe/slw
asm.jsで目的は達成してるし他にはいらん
しかもasm.jsはソースがグチャグチャになるからアセンブラ並の難読化の役割も果たしてる
分かりやすくして欲しくない
20デフォルトの名無しさん
垢版 |
2015/02/11(水) 23:07:43.53ID:z1YCt8TB
asm.jsはネイティブのコードをJS化するときに活用できるものであって、
"use strict"の強化版的なSaneModeとはユースケースが違う。
特にvarの使用位置にこだわる人やLint勢、クラスベース言語経験者からは喜ばれると思う。
21デフォルトの名無しさん
垢版 |
2015/02/11(水) 23:21:05.94ID:z1YCt8TB
Sane/Soundで一番JSらしくなくなるのはオブジェクトが拡張できなくなる点だが、
sealedされて型のついたオブジェクトというのは、ES7で前々から提案されていたTypedObjectと同じだ。
コンストラクタがデフォルトでTypedObjectを返すようになるモードと考えれば、違和感も薄れるかもしれない。
2015/02/11(水) 23:31:26.15ID:TfFe/slw
pdf読んだが、ただのstrict modeの拡張レベルの話しだな
SoundScriptの方にいたってはTypeScriptのパクリだし
TypeScriptパクる奴は後を絶たないな
2015/02/11(水) 23:38:26.87ID:sJPqGjE7
パクってもらうのが目的な気がしてならない
24デフォルトの名無しさん
垢版 |
2015/02/12(木) 04:27:00.28ID:vBHOZlzG
パクリも何もTypedScriptは元々ES6に向けたharmonyの機能を先行して実装し、
それに加えてES4の頃からアイディアがあってES7辺りでの実現が見込まれていた型注釈を組み込んだものだよ。
そしてTypeScriptの目標は自身(型注釈)がES7で取り入れられて最終的に用無しになることだからね。
CoffeeScriptなんかとよく並べられるが、どちらかと言うとtraceurや6to5みたいなトランスレーターの仲間と考えた方がいい。
とは言えTSの型注釈はコンパイル時の整合性チェックのためのもので、実行時に活用するSSとは少し有り様が違う。
2015/02/12(木) 13:51:21.11ID:sZL3z8VT
>>24
JavaScriptに型注釈が取り入れられるわけないし必要ない
それにブラウザ内蔵オブジェクトに正しく型を付けられるようにしたのはTypedScriptが最初だ
アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある
実行時に活用するのは同じGoogleのAtScriptがあるだろ
26デフォルトの名無しさん
垢版 |
2015/02/12(木) 15:31:26.12ID:vBHOZlzG
>>25
>>型注釈が取り入れられるわけない
そんなことはない
ただし、ESでの型注釈は現状無難なguardの方向になる可能性が一番高い
SSはもっと踏み込んでる

>>ブラウザ内蔵オブジェクトに正しく型を付けられるようにしたの〜
DefinitelyTypedについて言っているのならそれは完全にTSの功績
だがそれはTSの型注釈がコンパイル時の検証のためのものだから必要なのであって
ランタイムのチェックには必要ないもの

>>アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある
別にTSの実装が最初かどうかは論じてない
パクリかどうかについて言ったまでのこと
そういう論展開ならなおさら実装をパクったわけではないからぱっと見似ている機能を入れてもパクリでないということになる

>>AtScript〜
もしguardのことを言っているのであればそれもまたES7アイディアの一つで別軸、別機能、別の話
2015/02/12(木) 16:52:25.34ID:sZL3z8VT
>>26
> ただし、ESでの型注釈は現状無難なguardの方向になる可能性が一番高い
guardはブレンダン・アイクにいらねー言われてたよ

> DefinitelyTypedについて言っているのならそれは完全にTSの功績
ブラウザ内蔵オブジェクトは単純なclassの定義だけじゃ型付け出来ないものがある
TypeScriptは若干独特な仕様のinterfaceを導入して正しく型付けしている
28デフォルトの名無しさん
垢版 |
2015/02/12(木) 18:47:26.14ID:vBHOZlzG
>>27
guardそのものではないが、実行時の型チェック→エラー機能に留まる≒guardということ。

それと別に型が正しく型付けできない云々はあくまでTSの問題。TSが型をどのように定義し利用してるかの問題であって、一般的な話ではない。
そもそもTSにおける型とは架空のものだから。架空のものなのはJSが曖昧だから。

その点SSはそもそもクラスベースの世界だからインスタンスに紐付けられているクラス情報で判断できる。
で、ビルドインコンストラクタについてはどうやって外部の(プロトタイプベースの)世界と折り合いをつけるのかが示されていないから、
ランタイムチェックについては問題ないがAOT最適化をどうやるのかはなんとも言えない。
29デフォルトの名無しさん
垢版 |
2015/02/13(金) 21:09:48.47ID:WDmbay81
jsonの日
30デフォルトの名無しさん
垢版 |
2015/02/14(土) 03:59:43.76ID:TJAnvvXO
リア充の日
2015/02/16(月) 00:41:45.50ID:/X+NPUTO
Effective JavaScript読むとJSのきもさに眩暈がするな
元々ガチ向けじゃなかったものをガチ向けにした気持ち悪さ
まるで遊戯王
2015/02/16(月) 02:39:37.43ID:4iM7fmBu
どんな言語でもプログラムした事無い素人の典型的なレスだな(笑)
2015/02/16(月) 08:14:21.62ID:1Y+K6fCR
キモイだろ。普通に。
ここまで捏ね繰り回されたコードが普通に使われる言語は珍しい。
他の言語だとそういうキモイコードは、面白いけどさあ、で大体終わる。
2015/02/16(月) 09:39:29.51ID:o9E9nO+7
まあ皆キモイと思ってるから各種altJSが出てくるんだろうし
2015/02/16(月) 09:40:08.76ID:JcJgKv2l
>>34
そんなこと思ってる奴は全体でも1割もいない
2015/02/16(月) 11:42:38.28ID:8Z58kFg+
>>33
キモいってのは
(function() {
}());
ぐらいで他は特にないけど何がある?
2015/02/16(月) 12:09:44.82ID:G25umMgZ
やべえ、そのくらいじゃ全然キモいって思えねえ
まだobjectiveCのがキモい
2015/02/16(月) 12:57:21.51ID:AmwLqaSG
>>36
http://bonsaiden.github.io/JavaScript-Garden/ja/
特に巻き上げとか意味不明
あと、自動セミコロン挿入関連の書き方の宗教とか
2015/02/16(月) 13:36:48.91ID:8Z58kFg+
>>38
巻き上げの説明でよく出てくる例
var myname = "global";
function func() {
console.log(myname); //出力内容は?
var myname = "local";
console.log(myname); //出力内容は?
}
グローバルと同じ名前のローカル変数を定義してる時点で問題があるが、別の言語だと
"global"
"local"
と出力されるだろうが、そもそもローカル変数にアクセスしようとしてたら
どっちみち意味不明なバグになる
JavaScriptは親切に
undefine
"local"
としてくれるから逆に分かりやすい

セミコロンの問題はわざわざヘンテコな書き方をしない限り誰も問題とは思ってない
しいて上げれば末尾カンマの方が問題だ

ただ全部jshintをすれば事前に分かるから普通に書けば問題にはぶつからない
>>36のイディオムだけは使いまくるからどうにもならんけどな
2015/02/16(月) 15:23:28.07ID:AmwLqaSG
>>39
C#とかPythonだと上位スコープと同じ名前が後でローカル変数として宣言されるときは、宣言前に使うと構文エラーになって100倍わかりやすいんだが

あと
b = 10
(function(){})()
とかくと10が関数でないってエラーが出るし、関数返したりするとエラーすら出なくなるんだけど、セミコロン省略派の人はjshintで問題を見つけられるの?
2015/02/16(月) 15:59:58.43ID:8Z58kFg+
>>40
根本的に仕様が違う言語を持ち出すなよ
巻き上げの話しをしてんだから、せめて同名ローカル変数を許す仕様じゃないと比較する意味無いだろ
そんな事言ったら
同名ローカル変数を許す言語<許さない言語という結論で終わる(それには同意する)

jshintのデフォ設定ではセミコロン省略すると大量に警告が出る(>>40で2つ警告が出てる)
> とかくと10が関数でないってエラーが出るし、
エラーになるならそれでいいだろ
> 関数返したりするとエラーすら出なくなるんだけど
どういうコードか分からんかったが、それはエラーじゃないんだろ
2015/02/16(月) 16:30:21.26ID:8Z58kFg+
>>40
https://github.com/then/promise
ちなみに↑このライブラリの人はセミコロンを一切書いてない(lib内のソースとか)
それだけで使う気は失せたが一応ちゃんと綺麗に書けてる
2015/02/16(月) 17:23:39.47ID:AmwLqaSG
同名ローカル変数は許すよ。javascriptで巻き上げてundefinedになる状況がエラーになる。
http://ideone.com/7fi2bK

セミコロンで挙動が変わるのは極端だけどこういうの
function test()
{
・・console.log("A")
・・return function(){
・・・・console.log("B")
・・・・return function(){ console.log("C") }
・・}
}
test() //無=>ABC 有=>AD
(function(){console.log("D")})()

もっと単純でこういうのもあった
var a = [["A","B"],["C","D"]]
[0].map(function(i){ console.log(i);})

あと、即時関数も書いた人の宗教によって
(function(){ console.log("test1"); })();
(function(){ console.log("test2"); }());
+function(){ console.log("test3"); }();
みたいにいろんな呼び方があってキモいじゃん?
想定外の書き方が来ると?になるから、統一してほしい

>>42
boostrapなんかもセミコロン省略教だったりする
上みたいな状況がどうしても出てくるなら、行の先頭にセミコロンつけろだとさ
2015/02/16(月) 17:32:57.59ID:8Z58kFg+
>>43
> 同名ローカル変数は許すよ。
お前何様だよ

> test() //無=>ABC 有=>AD
残念大間違いw
test() //無=>ABC 有=>ABC
2015/02/16(月) 17:38:33.32ID:8Z58kFg+
>>44
違ったあってた
そもそも
(function(){console.log("D")})()
↑この書き方がイレギュラーな書き方なんだよ、それは最初に言っている

どんな言語だってコーディングスタイルの違いで変な書き方なんてあって当たり前だ
JavaScriptだけが特別じゃない
2015/02/16(月) 22:06:33.25ID:AmwLqaSG
>>44
>お前何様だよ
いや、お前が同名ローカル変数を許す言語にしろって言ったんだろ
念のためだが、俺が許すんじゃなくて、(C#やPythonの文法が)許すだからな?

>どんな言語だってコーディングスタイルの違いで変な書き方なんてあって当たり前だ
>JavaScriptだけが特別じゃない
設計じゃなくて文法と仕様が奇怪なのがjavascript
しかも、ときどき理解せずに踏んでしまう可能性がある

どの言語もしない変数の巻き上げ、使い物にならないtypeof、未定義値と限らないundefined、なぜかスコープを作らないブロック、オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動
配列は連想配列のように使えるけどfor inが安全に使えない、lengthが要素数を返さないなどなど、歴史上しょうがないのはわかるが、きもい

funtion(){}()と書けない理由も知らないで使っている人が多そう
別にjavascriptが嫌いなわけではないんだけどな
2015/02/16(月) 23:08:49.01ID:UGQzThdk
>>46
変数の巻き上げは実際には問題にならないって言ってる(そもそもそのコードがバグってるから)
神経質なやつが騒いでるだけ
> 未定義値と限らないundefined
これは意味が分からん
undefineを代入出来る事が気に入らないのか?
> なぜかスコープを作らないブロック
これは
(function() {
}())
の事でこればっかりはしょうがないと最初に言ってる
> オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動
var o = {};
console.log(o + o); // [object Object][object Object]
そんな事するわけないけど何か問題あるのか?意味が分からん

> 使い物にならないtypeof
これなんか完全に嘘を言って誘導しようとしてるな
普通に使ってるコードを山ほど見るけど、全部バグか?
これで完全に化けの皮が剥がれたな
2015/02/17(火) 00:44:58.04ID:jqPQ5aJG
>変数の巻き上げは実際には問題にならない
エラーになったほうがバグがすぐわかるじゃん
巻き上げる利点が何もない

>未定義値と限らないundefined
かなり最近まで「undefined = 1;」とかできた。「undefined 判定」とか検索すると苦労の跡が見える。
最近は変更できなくなったが、古いブラウザへの対応と残されたコードを理解するために知る必要がある。
でも、予約語ではないので変数名には使えて
function(){
var undefined = 1;
console.log(0[0] === undefined);
}
とやると0[0]は未定義なのにfalseになる。本来予約語にすべき。

> 使い物にならないtypeof
それはさっきあげたJavaScript Gardenより
http://bonsaiden.github.io/JavaScript-Garden/ja/#types.typeof
唯一有用なundefinedの判定は上に書いたとおり言語の欠陥がなければいらない記法
文句があるならこれ書いた人にpullreqでも送っとけ

>オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動
無論、わざと書くことはない。しかし、変数の中身の型を間違えていたりしても一見正常に動いて、中身が変わるとコケる場合がある。
初心者が===を==と書くともっと不思議な動作をするし、逆にこの手の処理がイディオムなってたりもする
2015/02/17(火) 00:46:09.01ID:jqPQ5aJG
以下長いが、これ全部結果の型と値わかる?これ全部結果の型と値わかる?
10*[5]
10*["5"]
10+[5]
10*[null]
10*[undefined]
10*[true]
10*[]
10*{}
10*[5,6]
10+true
10-true
10+[true]
Math.min(1,5,null,10);
Math.min(1,5,undefined,10);
Math.min(1,5,[],10);
Math.min(1,5,{},10);
[] === []
!![] === !![]
Nan === NaN
~NaN
-NaN
parseInt(true)
parseInt([])
Number(true)
Number([])
"aa" === new String("aa")
"aa" == new String("aa")
[1,5,10,50].sort()
["aa",NaN,[2],[1],["a"],[NaN],{"0":2},{"0": 1}].sort()
2015/02/17(火) 00:52:59.63ID:jqPQ5aJG
>>49
一番上の行はコピペミスです
2015/02/17(火) 01:09:47.26ID:ihqME62s
>>48
> エラーになったほうがバグがすぐわかるじゃん
だからundefinedになるからエラーになるって言ってんじゃん

> かなり最近まで「undefined = 1;」とかできた。「undefined 判定」とか検索すると苦労の跡が見える。
せめて"use strict"での話しをしろよ

> それはさっきあげたJavaScript Gardenより
> http://bonsaiden.github.io/JavaScript-Garden/ja/#types.typeof
糞記事
"foo" String string
1.2 Number number
true Boolean boolean
少なくともこれが分かる時点で使い道はあるし、実際使われている
objectだったらinstanceof使えばいい
それで使いものにならないと言ってたら単なるイチャモン付けてるだけ
はっきり言って、ちゃんとコード書いてたら型判定なんて必要ない事に気づけよ
Booleanクラスが判定出来ないから困っちゃう?ちゃんちゃらおかしいなw
2015/02/17(火) 01:40:35.02ID:jqPQ5aJG
>だからundefinedになるからエラーになるって言ってんじゃん
その場ですぐエラーになるとは限らない
グローバル変数を使ったつもりで全く別のタイミングで問題が出るかもしれない

>せめて"use strict"での話しをしろよ
してるじゃん。use strictでも予約語にはならないし、古いコード読むときに謎のundefined判定に対する知識が必要
その書き方さえ何パターンもあり、少なくとも美しくはない

>使い道はある
使い道があるかどうかじゃなくて、きもいかどうかのお話をしてる
もっと使い勝手の良くて、Object.prototype.toStringとか不自然なことしなくてすめばいいのに
擬似的なオーバーロードみたいに使い道はあるのに、型よってころころ判定法を変える言語なんてそうないよ
2015/02/17(火) 02:17:19.61ID:52Ru56el
古いコードでもundefinedに代入するなら代入するなりの理由が無いとやらんと思うぞ
そんなコードはそもそも要注意コードだと思うの
2015/02/17(火) 08:36:36.32ID:T8d9Ogf5
全体的には ID:jqPQ5aJG に同意

>>48
> var undefined = 1;
これは本当に何とかして欲しい
スコープチェーン上で汚染されるのは ES5 仕様では回避しようがない
現状ではtypeof 演算子なり void 演算子を利用するしか選択肢がないわけだが、ES6 で Keywords に入れてもらえないものかね…
2015/02/17(火) 08:51:15.40ID:T8d9Ogf5
typeof 演算子の極悪さは Null 型、Object 型の判定にあると思う

typeof null === 'object'; // true
typeof new Function === 'function'; // true
typeof ActiveXObject('Excel.Sheet') === 'unknown'; // true

これらは全て ES5 に準拠しているわけだが、全く信じられない挙動だ
Null 型の判定は === で可能だからまだマシだが、Object 型の判定に Object() を利用しなくちゃならんのが面倒くさい
"type" の名を関する演算子なのに「型」以外の文字列が返すなと問い詰めたい
2015/02/17(火) 13:47:28.70ID:9i2JMVg5
> var undefined = 1;
そんな事するわけ無いだろ、誰も困ってねーよ
2015/02/17(火) 13:50:15.56ID:9i2JMVg5
>>55
なぜtypeofを使うかをちゃんと考えれば困ることはない
お前プログラム組んだこと無いだろ
2015/02/17(火) 14:14:32.83ID:MalAvpsB
>>56
「する」「しない」の問題じゃない
良いブログラムならそれ以前に「出来ない」
2015/02/17(火) 18:54:07.52ID:DEFQP+nD
>>57
君は仕様を読んで型の厳密判定をする方法について考えたことがなさそうだな
Object 型に限定した判定法が必要になるケースもある
ES の Native method がそういう設計だし、それに似せると必然的に型判定を厳密にするようになる
2015/02/17(火) 19:17:26.55ID:9i2JMVg5
>>58
出来ないから何?
やらないものを出来る出来ないなんてどうでもいいし気にもならない
当然キモいなんて全く思わない

>>59
> Object 型に限定した判定法が必要になるケースもある
取り合えず例をあげてよ
2015/02/17(火) 19:50:13.90ID:jqPQ5aJG
>>60
ローカル変数名にundefinedを使ったコードを読むときに仕様を知らないといけない
var undefined;
とすると、上のスコープと無関係にundefinedを未定義にできる
古いブラウザへの対応も含めてこれを利用したコードが残っている

だから、書き換え可能だった頃の対策コードを含めて、害しかない仕様を詳細に理解せざるを得ない

お前が熟知してても、勉強途中の理解がたりない人に優しい仕様ではないね。エラーにする言語なら間違えようがないところ
2015/02/17(火) 21:23:01.60ID:DEFQP+nD
var undefined; については他の定数と比較すれば違いがよくわかる

(function () {
var true = 1; // SyntaxError: Unexpected token true
var false = 1; // SyntaxError: Unexpected token false
var null = 1; // SyntaxError: Unexpected token null
var undefined = 1;
}());

true, false, null で変数宣言が出来るケースを考えてみるといい
ちなみに、null が書き換えられた場合は undefined の比でなく面倒になる
null は typeof 演算子の仕様バグがあるから固定値を取り出すには必ず、null を返すが決まっている関数or演算子を使うしかない
undefined と違って null には void 演算子のような便利な機能は用意されていないのでスコープチェーン上で
var null = /./.exec('');
を宣言するぐらいか
2015/02/17(火) 21:33:15.87ID:igbT8vqk
prototypeのおいしい使い方ってないかな
継承とか考えずにデコレータやアダプタとしてラップする方が便利かも
2015/02/17(火) 22:08:37.81ID:52Ru56el
>>61
それを利用してるんなら、その謎物体をundefinedとして扱って欲しいのでは?
2015/02/17(火) 22:35:27.98ID:DEFQP+nD
>>60
・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合
・配列のようなオブジェクト(NodeList等)を判定したい場合
2015/02/17(火) 23:45:34.81ID:DEFQP+nD
>>64
var undefined; を宣言した場合、ES5 で書き換え不可能になった window.undefined をスコープチェーン上で参照不可能になり、書き換え可能なローカル変数として扱われる
書き換え不可能だった定数が書き換え可能な変数に置き換わるのは良いコードとはいえない
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況