元スレ+ JavaScript の質問用スレッド vol.117 +
JavaScript覧 / PC版 /みんなの評価 :
251 = :
間に関数呼び出しの()があるけど、これの優先順位はメンバやnewより順位低くね?
new Date.getTime() だとエラーになるから (new Date).getTime() としなきゃならないしここらへんどうなってんの
252 = :
newに()を付けない書き方なんて許されてるの?
はじめて見たよ
253 = :
>>252
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/new
> new constructor[([arguments])]
()は関数呼び出しではなくnew演算子の一部で省略可能
254 = :
そうなんだ
それなら()がない時だけエラーになるのは何か変な感じするね
255 = :
別に構文エラーじゃないでしょ
256 = :
>>254
new演算子の対象が違う
257 = :
なんで対象が変わるんだ?
258 = :
new Date() と new Date は同じもの返すけど、その右に . とか [] つけたとき
new Date()の場合は、new Date()の結果に . か [] が結合するけど、
new Dateの場合は、Dateだけが . か [] に結合しちゃうね?
259 = :
>>257
() が省略されたから
>254とエラーコンソールを読めばわかる
260 = :
>>258
そのりくつはおかしい
new演算子とメンバ演算子の優先順位は同じなんだから、
素直に実行されるならnewされてからメソッドが呼び出されるはず
261 = :
>>259-259
new Date.getTime() と new Date().getTime()だと前者でエラーになるのは何でなんだよ
262 = :
()演算子が入らない場合はメンバ演算子が優先される
としか思えないな
263 = :
>>260
実際にIE/Firefox/GoogleChromeで試すと >>258 の挙動だから何故?って話
264 = :
メンバ演算子の方が強いから
265 = :
メンバ演算子は右から左
new演算子は左から右
「右から左」と「左から右」が戦ったら「右から左」が勝つってことじゃないの?
266 = :
優先順位決定のアルゴリズムをJavaScriptで書いてもらえませんか?
267 = :
>>260
new 演算子の対象は MemberExpression であって、優先順位は全く関係ない
優先順位で考える前に Syntax で考えるべき
http://es5.github.io/#A.3
268 = :
この辺が原因かな?
11.2 Left-Hand-Side Expressions
MemberExpression :
PrimaryExpression
FunctionExpression
MemberExpression [ Expression ]
MemberExpression . IdentifierName
new MemberExpression Arguments
NewExpression :
MemberExpression
new NewExpression
Arguments付きのnewはメンバ演算子と同等だけど、Arguments無しのnewは弱い感じ
269 = :
そもそも、new Identifier Arguments のように考えるのがおかしい
初めから NewExpression に含まれているのだから
前提となる Syntax を勝手に解釈するから矛盾が生まれる
271 = :
左辺
274 = :
>>268の文法が全てだけど
演算子の優先順位 - JavaScript | MDN
http://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
を見ると一目瞭然だよ
new より . [] の方が優先される (結合される方向も違う)
それを念頭におけば↓って解釈出来て>>258と同じになる
new Hoge.hoge[0]() → new ((Hoge.hoge)[0])()
new Hoge().hoge → (new Hoge()).hoge
new Hoge.hoge → new (Hoge.hoge)
275 = :
>>274
そのMDNの表じゃ、引数つきのnewと引数無しのnewの優先度の違いが説明できないよね?
276 = :
単純にnewより.が優先されるなら、
new Hoge().hoge → (new Hoge()).hoge じゃなくて、
new Hoge().hoge → new (Hoge().hoge) こうなるべきだよね?でもそうならない
277 = :
>>276
書いてて気付いたが、new は new Hoge と new Hoge() の2つの書き方(文法)が
あるってだけの問題な気がしてきた
>>276
まず . の右と左に分けると new と () の問題になって new が優先されて
new は () までが構文だから (new Hoge()).hoge じゃないのかな?
緊急地震速報で起こされてから寝れない…
278 = :
>>274
その表ではメンバ演算子とnew演算子は同じ優先順位1じゃん
279 = :
>>276
() が付いているから
Hoge()より new Hoge のほうが優先されるのでは
280 = :
同じ優先順位の左結合性と右結合性が衝突した場合、
右結合性が優先されるんだろう
左右どっちかを優先させないと決定できないから、
ドキュメントのどこかに書いてあるはず
はい論破
281 = :
難しく考えなくても、>>268の構文規則だけで>>258の挙動になることは十分説明できてるんだよ
あえて優先順位をつけるなら
newには引数付きのコンストラクタをとるものと引数無しのコンストラクタをとるものの2種類存在する
引数付きの場合の優先順位は>>274の表のとおり1番目になる
引数無しの場合の優先順位は>>274の表における2番目になる
こんな感じ
282 = :
その構文規則が「日本語でOK」なレベルだろ
何を書いてるのか分からん
283 = :
>>282
優先順位が
()有りのnew > メンバ演算子 > ()無しのnew
って事
284 = :
>>282
>>267で仕様書リンクが出てるからそちらを読むべき
読み方がわからないなら RFC 2234 を読む
http://www.t-net.ne.jp/~cyfis/rfc/format/rfc2234_ja.html
というか、「分からなくて当然」という態度で構えるなよ
285 = :
ニュアンスでわかるだろ
286 = :
つまり優先度以前に構文解析で「new Hoge()」「.hoge」に分割されるって事か
分かってみれば凄いシンプルだった
287 = :
JavaScriptを書くのにアブンフを分からないといけないのですか?
288 = :
曲がりなりにも「JavaScript を自ら学ぶ人のための質問スレ」なんだから参考URLを呼んでから判断しようぜ
>>267を読んでない人が多すぎる
289 = :
>>287
そのぐらい自分で判断しろよ
ABNFを学ばなければECMAScriptを理解できない理屈もわからんのか
290 = :
>>289
じゃあその理屈を説明してみろよ
アンブフなんて聞いたこともないが普通にJS使ってるしプゲラ
291 = :
>>267だって読んでないだろ
newの対象はNewExpressionにも成り得る
292 = :
暗部をしらないだと?
293 = :
>>288
そうなんだよね
それに最近は自分でゴリゴリ書く人よりもjQuery等のライブラリの質問が多くなった
純粋にJavaScriptのスキルアップや勉強をする人が減ったのかな
それとも今はjQueryを使うのが一般的なのかな(古い人間でゴメン
294 = :
>>293
JavaScriptは普通に勉強するでしょ?
勉強しなくなったのはブラウザ標準のDOM APIの方。
これはJavaScriptの範囲ではない。
DOM APIを勉強することを、JavaScriptの勉強だと
思ってるのならそれは間違っている。
DOMよりもjQueryの方が優れているのはあきらなかので
(ブラウザ間の互換性の話じゃなくて、機能的に優れている)
今の人は、JavaScript + jQueryを勉強している。
295 = :
都合とかは関係なく好みの問題だがjqueryは好きになれない
296 = :
>>295
好みの問題は置いといて、好きになれない理由を
技術的な観点から聞かせて欲しい。
297 = :
>>296
クライアント側に動かしてもらうコードは、可能な限り極限まで少なく小さくあるべき、という考え
298 = :
>>297
つまり、開発速度よりも、実行速度を気にしてるってこと?
299 = :
そんなこと言ってられるのは大したもの作ってないから
300 = :
この的外れ感
類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [97%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.115 + (1001) - [97%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.114 + (1001) - [97%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.127 + (160) - [97%] - 2021/7/16 9:30
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.127 + (1001) - [97%] - 2016/2/4 0:15
- + JavaScript の質問用スレッド vol.137 + (1003) - [97%] - 2019/3/26 11:46
- + JavaScript の質問用スレッド vol.107 + (1001) - [97%] - 2013/9/7 10:16
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.126 + (952) - [95%] - 2015/11/18 13:15
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
トップメニューへ / →のくす牧場書庫について