JavaScript 4©2ch.net (398レス)
1-

40
(2): 2015/02/16(月)15:23 ID:AmwLqaSG(2/4) AAS
>>39
C#とかPythonだと上位スコープと同じ名前が後でローカル変数として宣言されるときは、宣言前に使うと構文エラーになって100倍わかりやすいんだが

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

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

セミコロンで挙動が変わるのは極端だけどこういうの
function test()
{
・・console.log("A")
・・return function(){
・・・・console.log("B")
・・・・return function(){ console.log("C") }
・・}
省15
44
(2): 2015/02/16(月)17:32 ID:8Z58kFg+(5/6) AAS
>>43
> 同名ローカル変数は許すよ。
お前何様だよ

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

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

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

どの言語もしない変数の巻き上げ、使い物にならないtypeof、未定義値と限らないundefined、なぜかスコープを作らないブロック、オブジェクトなどに演算子を適用してしまうとエラーも出さずする不可解な挙動
配列は連想配列のように使えるけどfor inが安全に使えない、lengthが要素数を返さないなどなど、歴史上しょうがないのはわかるが、きもい
省2
47: 2015/02/16(月)23:08 ID:UGQzThdk(1) AAS
>>46
変数の巻き上げは実際には問題にならないって言ってる(そもそもそのコードがバグってるから)
神経質なやつが騒いでるだけ
> 未定義値と限らないundefined
これは意味が分からん
undefineを代入出来る事が気に入らないのか?
> なぜかスコープを作らないブロック
これは
(function() {
}())
省9
48
(2): 2015/02/17(火)00:44 ID:jqPQ5aJG(1/5) AAS
>変数の巻き上げは実際には問題にならない
エラーになったほうがバグがすぐわかるじゃん
巻き上げる利点が何もない

>未定義値と限らないundefined
かなり最近まで「undefined = 1;」とかできた。「undefined 判定」とか検索すると苦労の跡が見える。
最近は変更できなくなったが、古いブラウザへの対応と残されたコードを理解するために知る必要がある。
でも、予約語ではないので変数名には使えて
function(){
var undefined = 1;
console.log(0[0] === undefined);
省10
49
(1): 2015/02/17(火)00:46 ID:jqPQ5aJG(2/5) AAS
以下長いが、これ全部結果の型と値わかる?これ全部結果の型と値わかる?
10*[5]
10*["5"]
10+[5]
10*[null]
10*[undefined]
10*[true]
10*[]
10*{}
10*[5,6]
省20
50: 2015/02/17(火)00:52 ID:jqPQ5aJG(3/5) AAS
>>49
一番上の行はコピペミスです
51: 2015/02/17(火)01:09 ID:ihqME62s(1) AAS
>>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
省6
52: 2015/02/17(火)01:40 ID:jqPQ5aJG(4/5) AAS
>だからundefinedになるからエラーになるって言ってんじゃん
その場ですぐエラーになるとは限らない
グローバル変数を使ったつもりで全く別のタイミングで問題が出るかもしれない

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

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

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

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

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

ぬこの手 ぬこTOP 0.025s