javascript:alert([].sort.call(null)) == [object window] の謎 - Togetter
Twitterのつぶやきマッシュアップメディア!
@togetter_jpをフォロー
マイページ
メニュー
設定
ログイン
トップ
ニュース
社会
地域
芸能・スポーツ
IT・Web
科学・教養
カルチャー
趣味
生活
仕事
ネタ・お笑い
ログ・日記
震災
311
岩上安身
東電
放射脳
支援物資
三国志
中国
速報
国内
アジア
アメリカ
ヨーロッパ
その他
政治
経済
国際
法律
環境
コラム
東京
東京近郊
北海道
東北
関東
北陸・信越
東海
近畿
中国・四国
九州・沖縄
海外
芸能
テレビ
ラジオ
野球
サッカー
ゴルフ
格闘技
競馬
モータースポーツ
その他
Android
Apple
インターネット
パソコン
モバイル
ガジェット
サイト制作
プログラミング
その他
科学
テクノロジー
エネルギー
数学
物理
宇宙
自然
人文
建築
心理
その他
アニメ
ゲーム
マンガ
アイドル
映画
音楽
書籍
演劇
ファッション
社会学
カメラ
車・バイク
電車
旅行
釣り
歴史
アート
デザイン
動物
その他
ハウツー
レシピ
グルメ
恋愛
マネー
節約
健康・医療
教育
ペット
起業・ベンチャー
経営
マーケティング
会計・人事
法務
就職・転職
語学・資格
ネタ
お笑い
大喜利
画像・動画
やってみた
その他
ログ
日記
思い出
雑談
メモ
飲み会
議事録
イベント
セミナー
復興
原発
支援
政府
自治体
トップ
>
トップ
>
311
> javascript:alert([].sor..
2010/02/17 16:06:39
編集可能
ecmascript5
javascript
+
javascript:alert([].sort.call(null)) == [object window] の謎
JavaScript 難しい。
ECMAScript5の "use strict" 時の [].sort.call(null) の挙動に関する議論
by
teramako
6 fav
2442 view
Fav
6
お気に入りに登録ならここをクリック!
まとめ
メニューを開く
一括削除
javascript:alert([].sort.call(null)) これで window オブジェクト取れるのなんで?
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:14:52
【急募】 RT
@edvakf
: javascript:alert([].sort.call(null)) これで window オブジェクト取れるのなんで?
返信する
RTする
ふぁぼる
teramako
2010/02/17 15:17:59
@teramako
元ネタはここです。
http://webreflection.blogspot.com/2010/02/jslint-bad-part.html
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:19:32
@edvakf
むむむ、全然分からない。難しいですね。orz
返信する
RTする
ふぁぼる
teramako
2010/02/17 15:26:37
Worker の中でやったら [object DedicatedWorkerGlobalScope] となった。当然だけど。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:27:48
.
@edvakf
@teramako
ここの 15.3.4.4 じゃないでしょうか "thisArg が null または undefined の場合、呼出された関数は this 値としてグローバルオブジェクトを渡される"
http://bit.ly/bMp9wI
返信する
RTする
ふぁぼる
kei_s
2010/02/17 15:34:41
@kei_s
@edvakf
@teramako
あと、ECMAScript仕様書の15.4.4.11では「sortのthisがArrayでない時の挙動は実装依存」ともありますね。その両方が組み合わさってこうなってる?
返信する
RTする
ふぁぼる
piro_or
2010/02/17 15:39:30
@edvakf
call(null) は call(グローバル) と同じで、sort は this 値を返すことになっているのでそうなるんだと思います。
返信する
RTする
ふぁぼる
xulapp
2010/02/17 15:41:30
@kei_s
@piro_or
@xulapp
なーるほど。理解できました。実装依存となってるのは残念です… "use strict" だと global = (function(){return this})(); がエラーになるので。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:45:04
お、早速返事がもらえた。
http://webreflection.blogspot.com/2010/02/jslint-bad-part.html#1641595776929548932
window が length プロパティを持ってるからとか。知らないw
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:47:18
あ、でも call(null) でグローバルオブジェクトが入るのは "use strict" では消えるらしい…
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:48:03
@edvakf
a.sort()がa自身を返すので、.sort.call(null)は.sort.call(window)と同じでwindowを返す。同様に[].concat.call(null)は[window]となる(a.concat()!=aなので配列以外は配列に包まれる)
返信する
RTする
ふぁぼる
javascripter
2010/02/17 15:50:28
@piro_or
理解できた!これを機に ECMAScript の仕様をサクっと引けるようにしておきます
返信する
RTする
ふぁぼる
kei_s
2010/02/17 15:50:54
@edvakf
確かにテキトーなページで試してみるとlengthが0ですね。その後this(nullだったのがglobal objectになる)が返されて、結果としてwindowが返ってると。
返信する
RTする
ふぁぼる
piro_or
2010/02/17 15:55:20
@javascripter
http://j.mp/aVhIq2
によると、window.length があるために Array じゃないのに sort がエラーにならないそうです。おもしろいですね。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 15:59:29
window.length はフレームの数。
https://developer.mozilla.org/ja/DOM/window.length
へー。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:00:27
ES5 の仕様読んでるけど "use strict" だと call(null) が使えないってどこに書いてあるのかわからない。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:05:37
@edvakf
o={};[].sort.call(o)==oでソートされない、
http://j.mp/aXPsyl
でwindowの0と1のtoStringを書き換えてからsortすると順序が変わるのでwindowはsortされてますね(window[0]はwritable)
返信する
RTする
ふぁぼる
javascripter
2010/02/17 16:14:26
@edvakf
lengthの有無はエラーに関係なく、windowはarray-likeなのでlengthが0だと何も起きないが、sortの安定性は不定なのでframeのあるサイトで[].sort.call(null)するとwindow[0]とかが変更される可能性があります。
返信する
RTする
ふぁぼる
javascripter
2010/02/17 16:21:37
javascript:alert( function(){return this}.call(null) ) がいいかも。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:25:01
@edvakf
PDF119ページの冒頭のNOTEにあります。callでの挙動は、strict限定の話ではないみたい
返信する
RTする
ふぁぼる
os0x
2010/02/17 16:31:55
use strict じゃなくても call(null) は使えないって、ちょっと問題出そうな気がする…
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:35:38
あれ、でもおかしい、別のところに、thisArg が null or undefined だったら global に置き換えろと書いてあったぞ。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:37:08
@edvakf
こっちはエラーではなく、globalがundefinedになる、だと思います、たぶん
返信する
RTする
ふぁぼる
os0x
2010/02/17 16:37:38
@os0x
58ページの Else if thisArg is null or undefined, set the ThisBinding to the global object. とどう関わってくるのか気になるところです。
返信する
RTする
ふぁぼる
edvakf
2010/02/17 16:38:14
Content from Twitter
残りを読む(12)
ブログへ
iframe版
拡張版
張付けプレビュー
Fav
6
あわせて読みたい
ECMAScript 5 strict mode では call(null) がダメな理由
objectif_49
arguments.calleeがstrictモードで禁止な理由
Function.prototype.caller でプライベートメソッドを実装する
tweetpy でとれたobjectをDjangoで保存したい→pickleしよう
powered by Preferred Infrastructure
コメント
ちょい追加
返信
teramako
2010/02/17 16:20:59
0
ちょい追加
返信
teramako
2010/02/17 16:34:27
0
ちょい追加
返信
teramako
2010/02/17 16:52:59
0
コメントを入力してください。
Twitterにも投稿する
みんなのおすすめ商品
商品を編集
おすすめ商品を登録する
JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
JavaScript 第5版
David Flanagan
設定を変更する
まとめを作成する
プロフィール
フォローする
まだ自己紹介が設定されていません。
teramako
twitter
rss
アップデート
まとめ
20
0
Firefox, GoogleChromeのJavaSc..
18
javascript:function::['alert..
2
javascript:alert([].sort.cal..
コメント
12
新着のまとめ
ぺりえさん(@perie_jp)が聞いた、攻撃..
new
佐藤正美Tweet_20120516_31
new
振津かつみ先生 講演会「福島の被曝とどう向き合..
new
第57回『IF I AM』(5月31日配信)
new
ジャニーズ銀座YOUの前にはMEがいる! 内博..
new
もっと見る
@togetter_jp
最近追加された商品
四字熟語100 (ドラえもんの学習シリーズ―ドラえもんの国語おもしろ攻略)
新明解 四字熟語辞典
まんがで覚える 天下無敵の四字熟語
わらべきみかの四字熟語かるた ([かるた])
四字熟語カード 1集 第2版―幼児から
オススメ
マイスター
トゥギャ通
InsideCHIKIRIN (ちきりん)氏の..
黙れ小僧!お前に◯◯学の不幸が癒せるのか
発達障害児を育てる幸せ満タン親バカなツイート集
up
アマゾンで服買ったよー(^o^)
なんか素敵な無線LANが飛びまくってる
new
映画HESOMORI-ヘソモリ-絶賛公開なう
もっと見る
まだおカフェ最終日の様子まとめ
new
からすけ まとめ
new
#キッザニアにあるべき職業体験を挙げてけ まとめ
new
「女川」ツイートまとめメモ 2012/05/3..
new
#ホモオの一番かわいい亜種考えたやつが優勝 まとめ
new
「#お前らお勧めの戦争映画を教えろ」
new
もっと見る
第80回「日食写真と昭和格差」
号外「みんなの金環日食まとめ―画像から教養ま..
第79回「虚構新聞とJリーグ」
第78回「コンプガチャとIT系かあちゃん」
第77回「びろーんと自宅警備隊」
第76回「Appleとパンツクッキー」
もっと見る
コメント