( ^ω^) 初学者・迷子・ロリ幼女はこちらで
_、_
( ,_ノ` ) プロフェッショナルは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/
JavaScript 4©2ch.net
2014/12/05(金) 12:19:07.19ID:fmzBASgG
2015/02/11(水) 23:31:26.15ID:TfFe/slw
pdf読んだが、ただのstrict modeの拡張レベルの話しだな
SoundScriptの方にいたってはTypeScriptのパクリだし
TypeScriptパクる奴は後を絶たないな
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とは少し有り様が違う。
それに加えてES4の頃からアイディアがあってES7辺りでの実現が見込まれていた型注釈を組み込んだものだよ。
そしてTypeScriptの目標は自身(型注釈)がES7で取り入れられて最終的に用無しになることだからね。
CoffeeScriptなんかとよく並べられるが、どちらかと言うとtraceurや6to5みたいなトランスレーターの仲間と考えた方がいい。
とは言えTSの型注釈はコンパイル時の整合性チェックのためのもので、実行時に活用するSSとは少し有り様が違う。
2015/02/12(木) 13:51:21.11ID:sZL3z8VT
>>24
JavaScriptに型注釈が取り入れられるわけないし必要ない
それにブラウザ内蔵オブジェクトに正しく型を付けられるようにしたのはTypedScriptが最初だ
アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある
実行時に活用するのは同じGoogleのAtScriptがあるだろ
JavaScriptに型注釈が取り入れられるわけないし必要ない
それにブラウザ内蔵オブジェクトに正しく型を付けられるようにしたのはTypedScriptが最初だ
アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある
実行時に活用するのは同じGoogleのAtScriptがあるだろ
26デフォルトの名無しさん
2015/02/12(木) 15:31:26.12ID:vBHOZlzG >>25
>>型注釈が取り入れられるわけない
そんなことはない
ただし、ESでの型注釈は現状無難なguardの方向になる可能性が一番高い
SSはもっと踏み込んでる
>>ブラウザ内蔵オブジェクトに正しく型を付けられるようにしたの〜
DefinitelyTypedについて言っているのならそれは完全にTSの功績
だがそれはTSの型注釈がコンパイル時の検証のためのものだから必要なのであって
ランタイムのチェックには必要ないもの
>>アイディアレベルのものと実際に実用的に動くものにしたのでは天と地ほどの差がある
別にTSの実装が最初かどうかは論じてない
パクリかどうかについて言ったまでのこと
そういう論展開ならなおさら実装をパクったわけではないからぱっと見似ている機能を入れてもパクリでないということになる
>>AtScript〜
もしguardのことを言っているのであればそれもまたES7アイディアの一つで別軸、別機能、別の話
>>型注釈が取り入れられるわけない
そんなことはない
ただし、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を導入して正しく型付けしている
> ただし、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最適化をどうやるのかはなんとも言えない。
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割もいない
そんなこと思ってる奴は全体でも1割もいない
2015/02/16(月) 11:42:38.28ID:8Z58kFg+
2015/02/16(月) 12:09:44.82ID:G25umMgZ
やべえ、そのくらいじゃ全然キモいって思えねえ
まだobjectiveCのがキモい
まだobjectiveCのがキモい
2015/02/16(月) 12:57:21.51ID:AmwLqaSG
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のイディオムだけは使いまくるからどうにもならんけどな
巻き上げの説明でよく出てくる例
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で問題を見つけられるの?
C#とかPythonだと上位スコープと同じ名前が後でローカル変数として宣言されるときは、宣言前に使うと構文エラーになって100倍わかりやすいんだが
あと
b = 10
(function(){})()
とかくと10が関数でないってエラーが出るし、関数返したりするとエラーすら出なくなるんだけど、セミコロン省略派の人はjshintで問題を見つけられるの?
2015/02/16(月) 15:59:58.43ID:8Z58kFg+
2015/02/16(月) 16:30:21.26ID:8Z58kFg+
>>40
https://github.com/then/promise
ちなみに↑このライブラリの人はセミコロンを一切書いてない(lib内のソースとか)
それだけで使う気は失せたが一応ちゃんと綺麗に書けてる
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なんかもセミコロン省略教だったりする
上みたいな状況がどうしても出てくるなら、行の先頭にセミコロンつけろだとさ
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+
2015/02/16(月) 17:38:33.32ID:8Z58kFg+
>>44
違ったあってた
そもそも
(function(){console.log("D")})()
↑この書き方がイレギュラーな書き方なんだよ、それは最初に言っている
どんな言語だってコーディングスタイルの違いで変な書き方なんてあって当たり前だ
JavaScriptだけが特別じゃない
違ったあってた
そもそも
(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が嫌いなわけではないんだけどな
>お前何様だよ
いや、お前が同名ローカル変数を許す言語にしろって言ったんだろ
念のためだが、俺が許すんじゃなくて、(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
これなんか完全に嘘を言って誘導しようとしてるな
普通に使ってるコードを山ほど見るけど、全部バグか?
これで完全に化けの皮が剥がれたな
変数の巻き上げは実際には問題にならないって言ってる(そもそもそのコードがバグってるから)
神経質なやつが騒いでるだけ
> 未定義値と限らない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でも送っとけ
>オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動
無論、わざと書くことはない。しかし、変数の中身の型を間違えていたりしても一見正常に動いて、中身が変わるとコケる場合がある。
初心者が===を==と書くともっと不思議な動作をするし、逆にこの手の処理がイディオムなってたりもする
エラーになったほうがバグがすぐわかるじゃん
巻き上げる利点が何もない
>未定義値と限らない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()
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
> エラーになったほうがバグがすぐわかるじゃん
だから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とか不自然なことしなくてすめばいいのに
擬似的なオーバーロードみたいに使い道はあるのに、型よってころころ判定法を変える言語なんてそうないよ
その場ですぐエラーになるとは限らない
グローバル変数を使ったつもりで全く別のタイミングで問題が出るかもしれない
>せめて"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 に入れてもらえないものかね…
>>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" の名を関する演算子なのに「型」以外の文字列が返すなと問い詰めたい
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
2015/02/17(火) 14:14:32.83ID:MalAvpsB
2015/02/17(火) 18:54:07.52ID:DEFQP+nD
>>57
君は仕様を読んで型の厳密判定をする方法について考えたことがなさそうだな
Object 型に限定した判定法が必要になるケースもある
ES の Native method がそういう設計だし、それに似せると必然的に型判定を厳密にするようになる
君は仕様を読んで型の厳密判定をする方法について考えたことがなさそうだな
Object 型に限定した判定法が必要になるケースもある
ES の Native method がそういう設計だし、それに似せると必然的に型判定を厳密にするようになる
2015/02/17(火) 19:17:26.55ID:9i2JMVg5
2015/02/17(火) 19:50:13.90ID:jqPQ5aJG
>>60
ローカル変数名にundefinedを使ったコードを読むときに仕様を知らないといけない
var undefined;
とすると、上のスコープと無関係にundefinedを未定義にできる
古いブラウザへの対応も含めてこれを利用したコードが残っている
だから、書き換え可能だった頃の対策コードを含めて、害しかない仕様を詳細に理解せざるを得ない
お前が熟知してても、勉強途中の理解がたりない人に優しい仕様ではないね。エラーにする言語なら間違えようがないところ
ローカル変数名に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('');
を宣言するぐらいか
(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として扱って欲しいのでは?
それを利用してるんなら、その謎物体をundefinedとして扱って欲しいのでは?
2015/02/17(火) 22:35:27.98ID:DEFQP+nD
2015/02/17(火) 23:45:34.81ID:DEFQP+nD
>>64
var undefined; を宣言した場合、ES5 で書き換え不可能になった window.undefined をスコープチェーン上で参照不可能になり、書き換え可能なローカル変数として扱われる
書き換え不可能だった定数が書き換え可能な変数に置き換わるのは良いコードとはいえない
var undefined; を宣言した場合、ES5 で書き換え不可能になった window.undefined をスコープチェーン上で参照不可能になり、書き換え可能なローカル変数として扱われる
書き換え不可能だった定数が書き換え可能な変数に置き換わるのは良いコードとはいえない
2015/02/18(水) 06:15:00.64ID:VrkW+sKk
>>66
もちろん悪いコードだと思う
でも敢えてそんな記述をする以上は、そいつをundefinedとして扱えってコードなのだろう
そんなコードを意識してわざわざ変な判定をするのは却っておかしなことになるんじゃ?と言いたい
もちろん悪いコードだと思う
でも敢えてそんな記述をする以上は、そいつをundefinedとして扱えってコードなのだろう
そんなコードを意識してわざわざ変な判定をするのは却っておかしなことになるんじゃ?と言いたい
6866
2015/02/18(水) 08:03:14.70ID:fF9sUQWk6961
2015/02/18(水) 09:30:11.66ID:86t2mSil これから書くときはほとんど気にする必要はない
不便なのは、初心者が人のコードを読むとき
・undefinedがキーワードでないこと
・過去にグローバルオブジェクトが書き換え可能だったこと
・「未定義値であることを保証する」というパターン(イディオム)数種類
を知らないと、そのパターンを見た時にすぐには理解できなくて手が止まってしまう
当然調べてundefinedの仕様を学べばいいんだけど、undefinedが最初から予約語ならそもそもこんなこと考える必要も、知る必要もなかったのにね、ということ
実際、jQueryとかでもほんの最近まで
(function(window,undefined){ 中身 })(window)
としてundefinedを上書きしてたし、プラグインとかではまだこの書き方が残ってるやつはかなりある
不便なのは、初心者が人のコードを読むとき
・undefinedがキーワードでないこと
・過去にグローバルオブジェクトが書き換え可能だったこと
・「未定義値であることを保証する」というパターン(イディオム)数種類
を知らないと、そのパターンを見た時にすぐには理解できなくて手が止まってしまう
当然調べてundefinedの仕様を学べばいいんだけど、undefinedが最初から予約語ならそもそもこんなこと考える必要も、知る必要もなかったのにね、ということ
実際、jQueryとかでもほんの最近まで
(function(window,undefined){ 中身 })(window)
としてundefinedを上書きしてたし、プラグインとかではまだこの書き方が残ってるやつはかなりある
2015/02/18(水) 14:03:10.51ID:SiK8hGV0
2015/02/18(水) 15:06:09.95ID:9ZeaK8N0
文盲
2015/02/18(水) 17:28:09.82ID:yNLF/Zre
>>65
> ・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合
直感的に思いついた通りに実装すればいいだろ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});
> ・配列のようなオブジェクト(NodeList等)を判定したい場合
「ような」なんだから
if (hoge.length > 0) {
// 配列の「ような」オブジェクト
}
で問題ないだろ
> ・{hoge: true, foo: false} のように Object 型でオプションを指定したい場合
直感的に思いついた通りに実装すればいいだろ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});
> ・配列のようなオブジェクト(NodeList等)を判定したい場合
「ような」なんだから
if (hoge.length > 0) {
// 配列の「ような」オブジェクト
}
で問題ないだろ
2015/02/18(水) 19:17:18.75ID:lIxPY8wl
>>72
それは Object 型の一部しか判定できてない
それは Object 型の一部しか判定できてない
2015/02/18(水) 20:55:04.71ID:yNLF/Zre
>>73
変なコーディングをしてる訳でもなく目的は達しているんで問題無い
変なコーディングをしてる訳でもなく目的は達しているんで問題無い
2015/02/18(水) 21:00:07.21ID:lIxPY8wl
>>74
特定の Object 型に制限する理由は全くない
それから Null 型が考慮されてない
配列も型判定がないからプロパティアクセス演算子でTypeErrorになる場合がある
ECMAScript でコードを書いた経験が少ないとしか思えないレベルだ
特定の Object 型に制限する理由は全くない
それから Null 型が考慮されてない
配列も型判定がないからプロパティアクセス演算子でTypeErrorになる場合がある
ECMAScript でコードを書いた経験が少ないとしか思えないレベルだ
2015/02/18(水) 22:43:31.46ID:M4E75IrS
>>75
null(undefined)チェックを忘れた…
function test(hoge, foo) {
'use strict';
if (!hoge) return;
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});
test(null);
test(undefined);
test([]);
test({hoge:[]});
単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
お前の方が素人丸出しだ
null(undefined)チェックを忘れた…
function test(hoge, foo) {
'use strict';
if (!hoge) return;
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
test(true, false);
test({hoge: true, foo: false});
test({hoge: 2});
test({hage: 2});
test(null);
test(undefined);
test([]);
test({hoge:[]});
単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
お前の方が素人丸出しだ
2015/02/18(水) 22:53:00.36ID:M4E75IrS
>>75
こっちもだった
if (hoge && hoge.length > 0) {
console.log('配列の「ような」オブジェクト', hoge[0]);
}
↓これらで問題無し
var hoge = null;
var hoge = undefined;
var hoge = [];
var hoge = {};
var hoge = {hoge:1};
var hoge = 1;
var hoge = "a";
こっちもだった
if (hoge && hoge.length > 0) {
console.log('配列の「ような」オブジェクト', hoge[0]);
}
↓これらで問題無し
var hoge = null;
var hoge = undefined;
var hoge = [];
var hoge = {};
var hoge = {hoge:1};
var hoge = 1;
var hoge = "a";
2015/02/18(水) 23:37:18.13ID:86t2mSil
>>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう
さすがに{length:10}を配列のようなものとは呼びたくないけど
さすがに{length:10}を配列のようなものとは呼びたくないけど
2015/02/18(水) 23:52:45.07ID:86t2mSil
2015/02/18(水) 23:55:34.69ID:M4E75IrS
>>78
いや{length:10}de配列ライクと言えると思われる
var hoge = {length: 10};
for (var i = 0; i < hoge.length; ++i) {
console.log(hoge[i]);
}
で全部undefinedが出力されるけど、それは普通の配列でも有り得る事だし
var hogeArray = Array.prototype.slice.call(hoge);
で配列に変換も出来る
いや{length:10}de配列ライクと言えると思われる
var hoge = {length: 10};
for (var i = 0; i < hoge.length; ++i) {
console.log(hoge[i]);
}
で全部undefinedが出力されるけど、それは普通の配列でも有り得る事だし
var hogeArray = Array.prototype.slice.call(hoge);
で配列に変換も出来る
2015/02/19(木) 00:01:52.76ID:4zgsUurY
>>79
直した…スマソ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (hoge && typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
直した…スマソ
function test(hoge, foo) {
'use strict';
if (typeof hoge === 'boolean') {
console.log('hoge is', hoge);
} else if (hoge && typeof hoge === 'object') {
if (hoge.hasOwnProperty('hoge') && typeof hoge.hoge === 'boolean') {
console.log('hoge is', hoge.hoge);
}
if (hoge.hasOwnProperty('foo') && typeof hoge.foo === 'boolean') {
console.log('foo is', hoge.foo);
}
}
}
2015/02/19(木) 00:46:16.03ID:+Jg4S+WS
>>80
JavaScript難しいなぁ
Array.prototype.slice.call(hoge);
ってするときに
hoge = {length:4.5} => 4コ
hoge = {length:Infinity} => 0コ
hoge = {length:99999999999 } => フリーズ
hoge = {length:-0.1} => 0コ
hoge = {length:-1} => フリーズ
hoge = {length:NaN} => 0コ
hoge = {length:true} => 1コ
うーむ・・・
でかいのはまだしも、負数を渡すとフリーズするのは内部で何をしているんだろう
JavaScript難しいなぁ
Array.prototype.slice.call(hoge);
ってするときに
hoge = {length:4.5} => 4コ
hoge = {length:Infinity} => 0コ
hoge = {length:99999999999 } => フリーズ
hoge = {length:-0.1} => 0コ
hoge = {length:-1} => フリーズ
hoge = {length:NaN} => 0コ
hoge = {length:true} => 1コ
うーむ・・・
でかいのはまだしも、負数を渡すとフリーズするのは内部で何をしているんだろう
2015/02/19(木) 01:00:49.63ID:4zgsUurY
>>82
sliceがマイナスの値は最後から処理するからな気がする
lengthがマイナスなのは配列とは言えないから
やっぱり
if (hoge && hoge.length > 0) {
var hogeArray = Array.prototype.slice.call(hoge);
}
ってのは必要だね
sliceがマイナスの値は最後から処理するからな気がする
lengthがマイナスなのは配列とは言えないから
やっぱり
if (hoge && hoge.length > 0) {
var hogeArray = Array.prototype.slice.call(hoge);
}
ってのは必要だね
2015/02/19(木) 01:35:12.55ID:iPujbk1h
2015/02/19(木) 08:45:08.63ID:ACeVxkIV
>>76
> 単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
> お前の方が素人丸出しだ
そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
http://es5.github.io/#x11.4.3
前方互換性をふまえれば、ES6 でも正しく判定出来ることが望ましい
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-typeof-operator
Null 型を誤検知するだけなら「Object 型の一部」とはいわない
あなたは ECMAScript 仕様書をまともに読んだことがないだろう?
ES 仕様に言及している意見に反論するなら仕様書ぐらい読んで欲しい
>>78
> >>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう
わかりやすくいうならば、 Array.prototype.forEach と同様の判定といえるかな
Array.prototype.forEach では ToObject, ToInt32 で型変換しているわけだが、型変換せずに TypeError を返したい状況もあるだろう
http://es5.github.io/#x15.4.4.18
> 単にnullチェック抜けてるって言えば済む問題を○型が考慮されてないとか
> お前の方が素人丸出しだ
そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
http://es5.github.io/#x11.4.3
前方互換性をふまえれば、ES6 でも正しく判定出来ることが望ましい
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-typeof-operator
Null 型を誤検知するだけなら「Object 型の一部」とはいわない
あなたは ECMAScript 仕様書をまともに読んだことがないだろう?
ES 仕様に言及している意見に反論するなら仕様書ぐらい読んで欲しい
>>78
> >>65 はそもそも何を持って配列のようなオブジェクトといいたいのだろう
わかりやすくいうならば、 Array.prototype.forEach と同様の判定といえるかな
Array.prototype.forEach では ToObject, ToInt32 で型変換しているわけだが、型変換せずに TypeError を返したい状況もあるだろう
http://es5.github.io/#x15.4.4.18
2015/02/19(木) 12:11:41.51ID:k55gX30E
>>85
> そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
それで事足りてるという事は仕様的に問題ないという事だ
対応できてない事で実用的に問題があるコード例を挙げて説明してくれ
そもそもJavaScriptは
var obj0 = {hoge:true, foo:false};
var obj1 = {foo:false, bar:1, hoge:true};
function Hoge() {this.hoge = true; this.foo = false;}
var obj2 = new Hoge();
のどれを渡されても同じように機能する事が期待されている
!obj(nullとundefinedのチェック)とプロパティーの存在チェック(と最終的に'number'などの型チェック)以外に必要だとは思えない
> そのコードは typeof 演算子の "Object (native and does not implement [[Call]])" しか対応できてないだろう?
それで事足りてるという事は仕様的に問題ないという事だ
対応できてない事で実用的に問題があるコード例を挙げて説明してくれ
そもそもJavaScriptは
var obj0 = {hoge:true, foo:false};
var obj1 = {foo:false, bar:1, hoge:true};
function Hoge() {this.hoge = true; this.foo = false;}
var obj2 = new Hoge();
のどれを渡されても同じように機能する事が期待されている
!obj(nullとundefinedのチェック)とプロパティーの存在チェック(と最終的に'number'などの型チェック)以外に必要だとは思えない
2015/02/19(木) 13:17:52.04ID:VHEGaKii
実際、>>72が直感的にコードを書いて多数間違えたぐらいだからなあ
rypeof演算子に関しては良い仕様とは言い難い
rypeof演算子に関しては良い仕様とは言い難い
2015/02/19(木) 15:27:06.03ID:/+bx2aTM
なにがArrayLikeかは難しいよ。どういう目的で区別するかで変わると思う。なぜなら何を配列と見立てられるかは用途によって変わるから。
例えば配列に変換したいという場合なら、ES6のArray.fromを参考にすると、
lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
これが広義のArrayLikeだろう。
またはArray.prototype.concatで、引数をSpreadすべきかどうかなら、実は配列かどうかというチェックだと問題がある。
だからES6からは@@isConcatSpreadableのチェックに変わった。
要するに「一般的なArrayLikeの判定」を定義するのは無理というか、しても役に立つものにならないと思う。
例えば配列に変換したいという場合なら、ES6のArray.fromを参考にすると、
lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
これが広義のArrayLikeだろう。
またはArray.prototype.concatで、引数をSpreadすべきかどうかなら、実は配列かどうかというチェックだと問題がある。
だからES6からは@@isConcatSpreadableのチェックに変わった。
要するに「一般的なArrayLikeの判定」を定義するのは無理というか、しても役に立つものにならないと思う。
2015/02/19(木) 16:24:08.30ID:+Jg4S+WS
>>86
プロトタイプチェインはたどらないの?
プロトタイプチェインはたどらないの?
2015/02/19(木) 19:11:01.43ID:FI1nksg/
>>88
> ES6のArray.fromを参考にすると、lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
Array.from は配列に変換する、つまり Object 型に変換するから変換元が Object 型であることを求めないだけな気がする
ierator を除くと Array.from は ToObject, ToLength(Int32への変換)をしている
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
変換後のオブジェクトが ArrayLike と考えられるので ArrayLike は「Object 型」「Int32のlengthプロパティを持つ」になる
Array.from の挙動は>>85で説明されている Array.prototype.forEach の挙動と一致する
Array.prototype 系メソッドを一通り読めばわかると思うけど、全てそういう挙動になってるよ
対象を isArrayLike で判定して例外を返すか、ArrayLike に変換するか、は意見が別れる(ポリシーに依る)だろうけどね
ES6 の挙動に合わせるなら変換する方になる
> ES6のArray.fromを参考にすると、lengthを持っているか(オブジェクトでなくともラッパーのプロトタイプにあればいい)、イテラブルならOK。
Array.from は配列に変換する、つまり Object 型に変換するから変換元が Object 型であることを求めないだけな気がする
ierator を除くと Array.from は ToObject, ToLength(Int32への変換)をしている
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.from
変換後のオブジェクトが ArrayLike と考えられるので ArrayLike は「Object 型」「Int32のlengthプロパティを持つ」になる
Array.from の挙動は>>85で説明されている Array.prototype.forEach の挙動と一致する
Array.prototype 系メソッドを一通り読めばわかると思うけど、全てそういう挙動になってるよ
対象を isArrayLike で判定して例外を返すか、ArrayLike に変換するか、は意見が別れる(ポリシーに依る)だろうけどね
ES6 の挙動に合わせるなら変換する方になる
2015/02/19(木) 21:45:10.46ID:/+bx2aTM
ToObjectがかかっているのは、null/undefinedはじきや、Getやらもろもろの処理がObjectであることを期待しているためだからであって、処理の本質とはあまり関係ないけどね。
あとToLengthはInt32でなく2^53-1までの整数。
長さを拡張すべきという問題が出て、Arrayに関しては互換性問題で見送られたけど、型付配列は長さ2^53-1までになったから、ここに関しても絶対基準はないと思う。
別にこの範囲でなくともエラーになるわけではなくて、範囲に収まるように強制されるだけだし。
あとToLengthはInt32でなく2^53-1までの整数。
長さを拡張すべきという問題が出て、Arrayに関しては互換性問題で見送られたけど、型付配列は長さ2^53-1までになったから、ここに関しても絶対基準はないと思う。
別にこの範囲でなくともエラーになるわけではなくて、範囲に収まるように強制されるだけだし。
2015/02/19(木) 22:21:02.70ID:cTS5FQ8e
>>91
なるほど
ES6 の Array.prototype.forEach の length も 2^53-1 に拡張されてるんだな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.foreach
今後、更に拡張される可能性を考えると、length に関しては Number.isInteger の判定ぐらいでいいのかもしれないな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger
なるほど
ES6 の Array.prototype.forEach の length も 2^53-1 に拡張されてるんだな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-array.prototype.foreach
今後、更に拡張される可能性を考えると、length に関しては Number.isInteger の判定ぐらいでいいのかもしれないな
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-number.isinteger
2015/02/23(月) 05:03:25.31ID:m2dP1v8u
別に整数かどうかの判定は要らないだろう。
「"5"」だったら「5」、「true」だったら「1」になるのがJS流だし。
整数の長さが欲しければ「len = obj.length|0」とするのがJS流。
「"5"」だったら「5」、「true」だったら「1」になるのがJS流だし。
整数の長さが欲しければ「len = obj.length|0」とするのがJS流。
94デフォルトの名無しさん
2015/02/24(火) 00:54:33.32ID:XD7S4Fuq try catchって頻繁に呼び出す関数では最適化できなくて遅くなるから使っちゃいけないのか?
知らなかった…Chromeのプロファイラに出ていた警告を見て初めて知った
知らなかった…Chromeのプロファイラに出ていた警告を見て初めて知った
2015/02/24(火) 11:35:35.42ID:SsySdaPd
2015/02/24(火) 12:16:53.92ID:lFZ8d0+y
関数全体を覆わなければ問題ない。
一番ベストな使い方は関数呼び出しの部分だけに使用する。
try{ func() }
そうでなくても全体で使用しなければ、tryの掛かっていない部分はfor文等一定のブロックごとに最適化が働く。
一番ベストな使い方は関数呼び出しの部分だけに使用する。
try{ func() }
そうでなくても全体で使用しなければ、tryの掛かっていない部分はfor文等一定のブロックごとに最適化が働く。
2015/02/24(火) 12:32:14.82ID:6vv1mCHr
>>94
try catchの使い方を間違えてるんでしょ。
try catchを正しく使うということは
try catchを使わないことを意味するw
何を行っているかわからないと思うが、
基本的に、windowのerrorイベントを使えばいいんだよ。
errorイベントは、誰もcatchしない時に呼ばれる所。
ここでまとめて処理すればいいし、普通はここで処理するもの。
例外的に途中でcatchしなくちゃいけない時だけcatchをする。
だからtry catchを正しく使う = try catchを使わないということになる。
逆に間違った使い方をしていると、catchしてalert()とかreturn falseとかするから、
間違った使い方 = try catchが多くなる。
try catchの使い方を間違えてるんでしょ。
try catchを正しく使うということは
try catchを使わないことを意味するw
何を行っているかわからないと思うが、
基本的に、windowのerrorイベントを使えばいいんだよ。
errorイベントは、誰もcatchしない時に呼ばれる所。
ここでまとめて処理すればいいし、普通はここで処理するもの。
例外的に途中でcatchしなくちゃいけない時だけcatchをする。
だからtry catchを正しく使う = try catchを使わないということになる。
逆に間違った使い方をしていると、catchしてalert()とかreturn falseとかするから、
間違った使い方 = try catchが多くなる。
2015/02/24(火) 12:48:11.36ID:wY5F80Ar
>>94
try-catch は例外を捕捉しなければエラー処理出来ない場合に使うもの
例外が発生する条件は確定しているのだから、 try-catch を使わなくても対応出来る場合が大半を占める
try-catch を使うのは new ActiveXObject() で対応する引数に応じて処理を分ける等の例外的なケースに限られる
try-catch は例外を捕捉しなければエラー処理出来ない場合に使うもの
例外が発生する条件は確定しているのだから、 try-catch を使わなくても対応出来る場合が大半を占める
try-catch を使うのは new ActiveXObject() で対応する引数に応じて処理を分ける等の例外的なケースに限られる
2015/02/24(火) 16:54:22.71ID:gLNZIunY
netbeansを使ってるんだけど最初にテンプレが出ますよね?あれを編集する方法ないですか?
100デフォルトの名無しさん
2015/02/25(水) 22:58:43.24ID:JtIRtORE 現行スレ
+ JavaScript の質問用スレッド vol.123 + [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/hp/1423915644/
+ JavaScript の質問用スレッド vol.123 + [転載禁止](c)2ch.net
http://peace.2ch.net/test/read.cgi/hp/1423915644/
101デフォルトの名無しさん
2015/02/25(水) 23:20:48.35ID:JFD+ngFs102デフォルトの名無しさん
2015/02/27(金) 18:16:56.06ID:6eP810Kn >>101
テンプレのタグが分かりません・・・
テンプレのタグが分かりません・・・
103デフォルトの名無しさん
2015/02/27(金) 19:56:27.10ID:Wvtuv0/g >>102
それは自分で努力すればいいよね?
それは自分で努力すればいいよね?
104デフォルトの名無しさん
2015/03/13(金) 19:23:10.11ID:UBRcUR4y jsonの日
105デフォルトの名無しさん
2015/04/12(日) 11:08:10.55ID:7j69OB5F 『関数型プログラミングに目覚めた! IQ145の女子高校生の先輩から受けた特訓5日間』
http://www.amazon.co.jp/dp/4798043761/
せっかくだからJavaScriptで関数型プログラミングを学んでみるのも面白いかもしれないな。
http://www.amazon.co.jp/dp/4798043761/
せっかくだからJavaScriptで関数型プログラミングを学んでみるのも面白いかもしれないな。
106デフォルトの名無しさん
2015/04/12(日) 17:02:14.80ID:PVRHL1t5 >>105
Qiitaアカバンされたポエマー、毛の壁先生じゃんw
Qiitaアカバンされたポエマー、毛の壁先生じゃんw
107デフォルトの名無しさん
2015/05/18(月) 15:33:55.56ID:lIw4CyOJ JavaScriptが20周年。開発者のBrendan Eich氏が過去と未来についてのスライドを公開
ttp://www.publickey1.jp/blog/15/javascript20brendan_eich.html
ttp://www.publickey1.jp/blog/15/javascript20brendan_eich.html
108デフォルトの名無しさん
2015/05/18(月) 17:37:17.88ID:rf0kuBu1109デフォルトの名無しさん
2015/05/20(水) 01:48:48.87ID:zDiYcCDM 言語としてはかなりシンプルだったからな。
LexとYacc使っただろうし、スタックマシンな
バイトコードインタープリタはSchemeのインタープリタを
Cで書いたことがあれば難しくない。
コードを10日で書いたからクソというよりは、
書く前に言語仕様をきちんと練らなかったからクソなんだろう。
LexとYacc使っただろうし、スタックマシンな
バイトコードインタープリタはSchemeのインタープリタを
Cで書いたことがあれば難しくない。
コードを10日で書いたからクソというよりは、
書く前に言語仕様をきちんと練らなかったからクソなんだろう。
110デフォルトの名無しさん
2015/05/20(水) 05:27:02.66ID:iajmjkjM 10日で書いたにしては良くできてるけど、もともとVBAみたいなものなのに、
後からいろいろ理屈を考えて素晴らしいものみたいに言いくるめようと
したのがいけなかったんじゃないの。
アプリに付属させるマクロだと思えば、納得の仕様だと思うけど。
元々そういうものなんだし。
後からいろいろ理屈を考えて素晴らしいものみたいに言いくるめようと
したのがいけなかったんじゃないの。
アプリに付属させるマクロだと思えば、納得の仕様だと思うけど。
元々そういうものなんだし。
111デフォルトの名無しさん
2015/05/20(水) 11:19:23.20ID:0vsGwB+G >>109
すまないが、ゴミをシンプルって言う風潮やめてくれるか?
すまないが、ゴミをシンプルって言う風潮やめてくれるか?
112デフォルトの名無しさん
2015/05/20(水) 12:06:13.47ID:D22K7RGs ClojureScript使い始めたらJSのクソさが
気にならなくなってきた。
気にならなくなってきた。
113デフォルトの名無しさん
2015/05/20(水) 12:18:11.33ID:qzEPJuIN 誰でも10日で出来る作業なら
クソだろうさw
10日でとても出来ないような作業を
10日で作ったのならば、それは優秀ってことだよ。
優秀な人が作ったのだから、とても良く出来ている。
クソだろうさw
10日でとても出来ないような作業を
10日で作ったのならば、それは優秀ってことだよ。
優秀な人が作ったのだから、とても良く出来ている。
114デフォルトの名無しさん
2015/05/20(水) 14:27:44.16ID:0vsGwB+G >>113←こういうの権威主義の馬鹿っていうんだよねぇ。日本人に実に多い。
115デフォルトの名無しさん
2015/05/20(水) 15:12:28.11ID:qzEPJuIN どれだよ権威ってw
権威じゃなくて実力だろw
権威じゃなくて実力だろw
116デフォルトの名無しさん
2015/05/23(土) 05:06:34.47ID:aWFfanUl jsスレでdisるのもアレだけど
権威主義以外の何物でもない
10日で作ったのは凄いかもしれんが別に洗練されてもないしシンプルでもない
初期のjsって文字列演算、暗黙変換とか無駄に長いfunctionとか、
中途半端にvbやC++の真似もしてて、バージョン違いの挙動もあって普通にクソ
初期のを優秀とか言う奴はES6使わないで欲しい
本人はサブセット言語嫌いとかlisp嫌いとか好き勝手言ってるみたいだけど
素直にパクリ元のselfのサブセットを素直に実装すりゃよかったと思うわ
権威主義以外の何物でもない
10日で作ったのは凄いかもしれんが別に洗練されてもないしシンプルでもない
初期のjsって文字列演算、暗黙変換とか無駄に長いfunctionとか、
中途半端にvbやC++の真似もしてて、バージョン違いの挙動もあって普通にクソ
初期のを優秀とか言う奴はES6使わないで欲しい
本人はサブセット言語嫌いとかlisp嫌いとか好き勝手言ってるみたいだけど
素直にパクリ元のselfのサブセットを素直に実装すりゃよかったと思うわ
117デフォルトの名無しさん
2015/05/23(土) 08:57:54.91ID:3bf42BAL だいたい名前からしてクソだよ。
全然関係無いJavaパクってるんだし。
全然関係無いJavaパクってるんだし。
118デフォルトの名無しさん
2015/05/23(土) 10:54:12.24ID:vTpQyjFi119デフォルトの名無しさん
2015/05/24(日) 00:11:51.40ID:hZNW9MV5120デフォルトの名無しさん
2015/05/24(日) 13:15:55.75ID:bCeKXRbu >>119
じゃあどこが権威主義なのか
噛み砕いて説明してください。
その前に前提として権威主義とは何かを書いておきますね。
http://ja.wikipedia.org/wiki/%E6%A8%A9%E5%A8%81%E4%B8%BB%E7%BE%A9
> 権威主義(けんいしゅぎ)とは、権威に服従するという個人や社会組織の姿勢、思想、体制である[1][2]。権威主義の反対は個人主義や民主主義である。
> 政治学上の用法では、権威主義体制とは非民主的な体制の総称であり、通常は独裁、
> 専制、全体主義などを含むが、権威主義体制を民主主義体制と全体主義体制の中間とする立場もある[5][6]。
http://d.hatena.ne.jp/keyword/%B8%A2%B0%D2%BC%E7%B5%C1
> 権威(人を服従、強制させる力)に価値をおき、それに対して自己卑下や盲目的服従をする態度のこと。
> また逆に人にそれを要求する態度のこと。心理学的には、権威や伝統、社会的に価値のあると
> されているものを無批判に承認し、これに服従、依存し、融通が利かないパーソナリティを指す。
じゃあどこが権威主義なのか
噛み砕いて説明してください。
その前に前提として権威主義とは何かを書いておきますね。
http://ja.wikipedia.org/wiki/%E6%A8%A9%E5%A8%81%E4%B8%BB%E7%BE%A9
> 権威主義(けんいしゅぎ)とは、権威に服従するという個人や社会組織の姿勢、思想、体制である[1][2]。権威主義の反対は個人主義や民主主義である。
> 政治学上の用法では、権威主義体制とは非民主的な体制の総称であり、通常は独裁、
> 専制、全体主義などを含むが、権威主義体制を民主主義体制と全体主義体制の中間とする立場もある[5][6]。
http://d.hatena.ne.jp/keyword/%B8%A2%B0%D2%BC%E7%B5%C1
> 権威(人を服従、強制させる力)に価値をおき、それに対して自己卑下や盲目的服従をする態度のこと。
> また逆に人にそれを要求する態度のこと。心理学的には、権威や伝統、社会的に価値のあると
> されているものを無批判に承認し、これに服従、依存し、融通が利かないパーソナリティを指す。
121デフォルトの名無しさん
2015/05/24(日) 15:11:00.39ID:9Q9ph3Hr オリジナルがえらいのではなくて
パクリ損ないでオリジナルより劣化してるのがクソ、
っていう単純な話だと思うのだが……
パクリ損ないでオリジナルより劣化してるのがクソ、
っていう単純な話だと思うのだが……
122デフォルトの名無しさん
2015/05/24(日) 18:48:24.27ID:hZNW9MV5レスを投稿する
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【news23】小川彩佳アナ「ここまでの広がりになるということを、高市総理はどれだけ想像できていたんでしょうね」 日中問題特集で [冬月記者★]
- 「町中華」の“息切れ倒産”が増加 ブームにも支えられ職人技で踏ん張ってきたが… 大手チェーンは値上げでも絶好調 [ぐれ★]
- 毛寧(もう・ねい)報道官「中国に日本の水産品の市場は無い」 高市首相の国会答弁に「中国民衆の強い怒り」 ★2 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 俺「お湯を流してと…」シンク「ボンッw」
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- paypayで支払いするの便利すぎワロッタwwwwwwwwwwwwwww
- 日本人が昔から大切にしてること「正直、清浄、慈悲」あと一つ加えるなら何? [359572271]
- もう寝ます
