のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,949人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレ+ JavaScript の質問用スレッド vol.117 +

    JavaScript覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    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 = :

    この的外れ感


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について