X



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

■ このスレッドは過去ログ倉庫に格納されています
2018/07/31(火) 12:30:52.90ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。

■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
2018/10/19(金) 12:55:51.60ID:???
>>598
jQueryユーザーを貶める?
なにトチ狂った意地の悪いこと言い出してるんだ?
>>579に書いたように、俺は俺の思ったことを素直にそのまま書いただけ
それ以上でも以下でもない
それにjQueryユーザーがとは言ってないし、勝手な被害妄想して変なケチ付けんな
2018/10/19(金) 13:26:46.04ID:???
君たちどっか他のところ行ってくれませんかね…わざとなんだろうけど
2018/10/19(金) 13:35:11.85ID:???
喧嘩してるように見せかけて
両者とも何か共通の目的のためにやっているのだとしたら…
2018/10/19(金) 14:24:05.50ID:???
jQuery厨は相変わらずうざいな。いよいよ余裕なくなってきたかw
2018/10/19(金) 14:48:22.63ID:???
> 俺は俺の思ったことを

事実ではなくて、希望を書いたらしいなw
2018/10/19(金) 15:34:31.64ID:???
だから「思う」って書いてるでしょ?
しつこいね君は
そもそも悪魔が事実だったら大事じゃん
最近勝手に煽られたと思い込む煽り耐性マイナスのやつ多いね
短期で余裕がないっつうか
2018/10/19(金) 16:26:30.46ID:???
そっちじゃねーよw

> 親切な顔をして実際はポリフィルも自分で組めない
> jQueryの範囲でしか何もできない無能を作り出して
> 自分より優秀な人材が育たないようにしてる

↑これが事実ではなく、お前の希望だっていってんの
2018/10/19(金) 16:45:06.99ID:???
お前らスレ違い
ここは品評スレじゃなくて、質問用スレ
回答者の価値観を問うところではない
いい加減に成仏しろよ
2018/10/19(金) 18:37:18.09ID:???
無理です
jQuery君は数年前からこのスレを見張っており生き甲斐なのです
2018/10/19(金) 21:08:48.14ID:???
早いとこ1000まで埋めてくれ
2018/10/19(金) 21:37:13.65ID:???
.cssのファイル内の値を動的にできないでしょうか
HTML側はjsもphpも使用不可なのですが、
cssファイルは別サーバーに置ける為、使用可能です
611610
垢版 |
2018/10/19(金) 21:42:38.78ID:???
具体的には、
タイマーで、ある特定の期間だけcssファイルで指定しているheightの値が変わるように仕組みを作りたいんです。
バッチファイル+タスクスケジューラでアップロードする方が現実的でしょうか?
2018/10/19(金) 22:59:11.14ID:???
>>611
サーバ側でクロンでも書けばいいじゃない
2018/10/20(土) 00:28:12.31ID:???
>>610
jsも別サーバーに置けないの?
っいうかなんだってそんなことに?
2018/10/20(土) 01:09:53.02ID:???
>>612
それが一般的な方法ぽいですね・・

>>613
jsはcssと同じ外部サーバーに置けます。
ECモールだとこんなのばっかりですよ
2018/10/20(土) 02:53:32.82ID:???
>>614
> それが一般的な方法ぽいですね・・
いやいや、一般的ではないよ。

特定の期間以外はCSSファイル見てもわからないようにしたいっていうのなら話は違うが
cssファイルを動的に生成するのは一般的にはアンチパターンだよ
(ついでにいうとJavaScriptファイルも動的に生成しないほうが良い
必要ならばJSONデータを動的に生成してしようする)


>>611
> タイマーで、ある特定の期間だけcssファイルで指定しているheightの値が変わるように仕組みを作りたいんです。

「ある期間」っていうのが午前、午後やタイムセール、キャンペーン期間中みたいに
特定の言葉で表せるのであれば、以下のようなCSSを書く

div { height: 100px }
.sale div { height: 200px }

HTMLの<html>や<body>なんかのclassで現在の期間を表現する
例えば <body class=""> or <body class="sale"> みたいな感じ
ここまではCSSの範疇だからJavaScriptしらない人でも画面デザインだけ担当できる。


でJavaScriptで特定の期間を判断して<html>や<body>のclassを書き換える
用途は違うがModernizr (https://modernizr.com/) でも用いられているテクニック

見ての通りJavaScriptもCSSも静的で作れる
これが一般的な方法
2018/10/20(土) 07:00:23.39ID:???
>>606
だから希望でも何でも良いよ
俺は俺の思ってることを素直に書いてるだけだから
君がどう捉えたかという話はどうでもいい
好きにして
2018/10/20(土) 07:29:14.73ID:???
俺は事実を素直に書いてるだけだから
>>579が間違いだから、間違いって書いただけ
2018/10/20(土) 10:12:37.03ID:???
>>615
なるほど。

>でJavaScriptで特定の期間を判断して<html>や<body>のclassを書き換える

しかし、セキュリティ的な問題か何かしりませんが
html側のサーバーにはjsを効かせる事はできません。
cssのみ可能なのと、そのcssの外部サーバーにはjsを置く事はできます。
2018/10/20(土) 10:29:58.68ID:???
>>618
その外部jsをhtml側から読むことはできない設定(?)なんだよね?
2018/10/20(土) 10:41:21.10ID:???
>>617
うーん、最初からそれだけでいいじゃん
君が突っ込んだ色々な不思議ポイントは結局全部君の思い込みだったわけだしね
恥ずかしい人
2018/10/20(土) 12:45:09.49ID:???
>>618
じゃあCSSをPHPで書けば?
2018/10/20(土) 12:58:19.01ID:???
>>618
> しかし、セキュリティ的な問題か何かしりませんが
> html側のサーバーにはjsを効かせる事はできません。

>>614
> jsはcssと同じ外部サーバーに置けます。
ってかいたよな?

jsが使えないのに、わざわざ置けますって言ったのか?
そりゃ置くだけなら置けるだろうけど、動かないんじゃ
置いたって意味ないじゃん
2018/10/20(土) 12:59:39.61ID:???
>>620
あんたのレスが「思い込み」と指摘されたからって
相手にも同じ言葉を無理やり使おうとしなくていいよw
日本語がおかしくなってる
2018/10/20(土) 18:10:38.35ID:???
意見も希望も主観には変わらないわけで、その定義に拘って議論するのは馬鹿馬鹿しい
2018/10/20(土) 18:19:53.51ID:???
>>619
はいそうです

>>621
なるほど、phpファイルのheaderでcssファイルとして認識させるようにすればいいんですね

>>622
はいそうです。直接jsファイルは読み込めません。すみません。
2018/10/20(土) 22:51:18.80ID:???
>>625
もしくは.htaccessとかで-.cssが呼ばれた時-.phpを呼ぶようにcssを置くサーバーで偽装する
2018/10/21(日) 01:24:35.87ID:???
>>621
こんだけ限定された条件だと
これに一票かなあ
628Name_Not_Found
垢版 |
2018/10/21(日) 19:12:28.26ID:PfpMCgsw
初心者です。
if (!args.length) { 処理 } の条件を日本語訳してもらえませんか?
argsは変数なんですが、lengthは変数じゃないです。
変数argsの長さじゃなかったら? でしょうか。。おねがいします
2018/10/21(日) 19:21:20.56ID:???
>>628
否定 javascript

falsy javascript
あたりで検索してみるとか
2018/10/21(日) 19:25:53.72ID:???
lengthは長さを数値で返す
数値をそのまま条件にすると
0は否、0以外は正。
それを!で逆転してるので

長さが0であれば、の意。
※argsが存在して配列や文字列などlengthメソッドが働く前提
2018/10/21(日) 19:31:48.58ID:???
>>630
ごめんlengthはプロパティだわ
632628
垢版 |
2018/10/21(日) 19:34:16.74ID:+KGIAcbR
ありがとうございます!よくわかりました。これで先に進めそうです。またお願いします
2018/10/22(月) 16:24:37.89ID:???
適当に書くときはいいけど
慣れちゃうとちょっと怖いよね
args.lengthがundefinedでもnullでもfalseでも通っちゃうし
2018/10/23(火) 20:39:26.75ID:???
>>633
それが排列であることを確定させているなら、問題はないかと
2018/10/23(火) 21:09:50.10ID:???
排泄
2018/10/23(火) 21:20:03.47ID:???
NodeRedって流行ってるの?
知識ない自分の力量不足だけど使いにくい…
2018/10/23(火) 21:23:36.40ID:???
https://blechmusik.xii.jp/d/misc/hairetu/
2018/10/23(火) 22:49:46.08ID:???
>>636
ハイパーカードを思い出す
これでできる範囲のことであれば楽できるね
ってやーつだと思ってる
2018/10/23(火) 23:39:33.33ID:???
>>638
簡単なUI作ったりするのは便利なんだけどDBとのやりとりとかExcelに出力したりさせようとしたら訳わからなくなって詰まった
こういうのをNodeRedでやろうとするのが間違ってるのかなぁと思ったり
2018/10/25(木) 12:47:18.40ID:???
>>631
lengthはプロパティでもメソッドでもなくプロパティアクセス時にArrayの内部プロキシによって特別に扱われる名前
アクセサメソッドにも近い
2018/10/25(木) 14:43:57.61ID:???
Pythonを学習中です。
Webの事は全くの素人です。
スクレイピングや可視化する際、CSS XPath JavaScriptなどの事が分からなくて行き詰まってしまいました。

PythonとJavaScriptではじめるデータビジュアライゼーションという本で詰まりました。
知人にJavaScript第5版という古い本をもらいましたが、言語仕様が延々と書いてあるような感じで、自分には早過ぎました。
CSS、XPath、JavaScriptこの辺りを体系的に学べるおすすめの本あったら教えて欲しいです。
2018/10/25(木) 14:49:57.07ID:???
>>640
今でも読まれるたびに数えてんですかね?
2018/10/26(金) 07:06:26.78ID:???
うろ覚えだが呼ばれるたびに数えてたことはなかっただろう
更新のたびに内部プロパティを更新してそれを読み出すような仕組みじゃなかった?
2018/10/26(金) 07:43:19.89ID:???
>>642
getterではなく、setter
2018/10/26(金) 12:56:08.60ID:???
getterでもsetterでもなくね
2018/10/26(金) 13:05:10.89ID:???
>>641
HTML, CSS, JavaScript は、初心者用の本を読む。
CSS セレクターは、jQuery で学ぶ

または、CSS セレクター・XPath は、入門用サイトを見る

CSSセレクターは、jQueryの本に書いてあるけど、
XPathは、どの本にも書いていないから、入門用ウェブサイトを見る

XPathは重要度が低いから、無視してもよい。
CSSセレクターを使う方が、読みやすい
2018/10/26(金) 20:12:27.73ID:???
プログラミングは体系的には学べない
分からなければ分かるようにならない
でもそこで諦めたらそこまで
「言語仕様が延々と書いてあるような感じ」と思ったのなら
分かったのが0ということではないはず
最悪書いてある日本語は読めるのだから、1万分の1は分かるだろう
なら5万回分読めばいい
そしたら1-(1-0.0001)**50000で0.9932637373893968で99%理解できる
分からなくてもほんの少しは分かるまで血を吐きながら無理やり頑張る
その繰り返しの修行で覚えるのがプログラミング
2018/10/26(金) 20:44:33.09ID:???
俺もXPathは後回しでいい…ってかやらなくてもいいと思う。
昔はCSSセレクタより表現力高いからとか言われてたがよくも悪くもXML全般に使われる汎用仕様だからな。
HTML/CSS仕様に寄り添い、技術要素疑似セレクタも使えて素のJavascriptやjQueryなどでも手厚くサポートされているCSSセレクタ覚えたらWeb系技術以外扱わないならXPathなんて正直いつ使うんだっていう。
Javaとかやるなら別だけど…
あれか、Pythonと一緒にやろうとしたからPythonライブラリの都合に引っ張られちゃったんだな!
2018/10/26(金) 21:02:05.71ID:???
>>647
書いてて恥ずかしくならない?
読んでて赤面したわw
650641
垢版 |
2018/10/26(金) 21:35:04.99ID:???
どうもありがとうございます
結果的にPythonスレとマルチポストになってしまっていたらごめんなさい。

>>646
PythonスレのRubyの方ですかね?
その節はありがとうございます。
初心者用というのはHTML5の初心者という事ですよね?
よく分かる〇〇とかいちばんやさしい〇〇だとか過去に読んだことあるんですが、その手の本ってパソコンそのものの初心者が対象なのか、
〇〇のコードを使ったらハンバーガーメニューが出せますとか、このコードを使ったらこういうレイアウトに出来ます。今流行りのスマホPC両対応のレスポシブなんちゃらのカッコいいホームページを作ろう、みたいな。
そういう本って理屈は置いておいて、カッコよさげなホームページが作れた。よかったね、っていう感じの本だから、
それぞれのコードの中身や用語の解説じゃないから結局提示されたcssのコピペだけで終わり訳もわからず応用が利かず結局何も身に付かなかったです。
オライリーからPythonの本が大量に出てるけどそんな感じの本があればいいんですが。

>>647
やっぱ甘えてますね、自分。
辛いけど、出来るようになりたいから読むしかないのかぁ。
651641
垢版 |
2018/10/26(金) 21:35:51.39ID:???
>>648
Webサイト作りそのものには全く感心は無いんですが、Pythonを学ぶうちに作ったデータの可視化をWebでやりたくなりました。
Pythonを学んだら今までは怖かったJavaScriptも基本的な文法はPythonで書いた場合を考えながらやればJavaScriptでもSwiftでもObjective-Cも何となく理解出来るようになりました。
JavaScriptもWeb用のナニカじゃなくて、これもPythonと同じプログラム言語だと分かったのでおもしろくなってきたました。

XMLを弄るにもXPathが分かれば簡単に弄れそうなんですが、XPathそのものが難しい。
Chromeの開発者ツールの使い方も分からないままだし。

>>649
けど、正論だと思いました。


オライリーからHTML5という本が出てますけれど、7年以上前の本だからやめておいた方がいいでしょうか?


>>641 で読んでる本の最初のページにこんなイラストが載ってました。
https://i.imgur.com/H3vQCNy.jpg
まさに自分もこんな認識です。
2018/10/26(金) 22:05:29.26ID:???
>>651
セレクタを覚えるなら、jQueryよりCSSを覚えた方が良い
jQuery拡張記法を覚えても何にもならん
https://triple-underscore.github.io/selectors4-ja.html

XPathは今でもCSSセレクタ以上の事が出来るが、日本語の資料は多くないので、初心者向きではないだろうな
2018/10/26(金) 22:10:26.33ID:???
>>645
Array(10).length = 1; // これはsetterでは?
2018/10/26(金) 23:44:44.27ID:???
getter, setterという場合、
Array(10).getLength();
Array(10).setLength(5);
などのようにメソッドの形を取る。

Array(10).length = 1;
は上のsetLengthとやることは同じだが、(実装はどうあれ)プロパティ形式を取っているのでsetterとは呼ばない。

なお説明に使っただけでArrayにgetLength、setLengthとあったメソッドは無い。
2018/10/27(土) 06:58:31.07ID:???
TypedArrayのlengthはgetter,setterだが
Arrayのlengthは内部プロキシが特別に扱っている名前というだけ
2018/10/27(土) 08:54:32.87ID:???
>>654
https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/set
2018/10/27(土) 10:10:23.05ID:???
>>656
Atrayのlengthはset/getが使えなかったときからある。だから>>655
658646
垢版 |
2018/10/27(土) 18:26:45.84ID:???
漏れが、XPath を使うのは、CSS セレクターでできない場合だけ。
例えば、5ch の書き込み内のa タグを抜き出すなら、

このCSSセレクターでできるけど、
div.thread > div.post > div.message > span > a

a を含む、post_node だけを抜き出す場合、
div.message の子孫で、aタグを含むものがある場合、
そのaタグの祖先のdiv.post を抜き出す。
(自分の処理では、div.postを主体に処理している場合)

CSSセレクターでは、div.message div.post a

descendant は子孫、ancestor は祖先。
post_nodes = doc.xpath "//div[@class='thread']/div[@class='post']/div[@class='message']/descendant::a/ancestor::div[@class='post']"

子孫に何々要素がある場合の、その祖先を求めるとか、
条件が複雑で、CSSセレクターでは表せない場合だけ、XPathを使う

jQueryのCSSセレクター一覧表を見て、それでできなければ、XPathを使う
2018/10/27(土) 19:38:24.03ID:???
:has擬似クラスが仕様に入ったからXPathの出番はますます無くなる
2018/10/27(土) 22:40:17.34ID:???
>>659
これマジうれしい
2018/10/27(土) 23:59:35.53ID:???
jQueryは:hasに独自で対応しているから、JavaScriptでは
もうXPathの出番はなくなってるね。
2018/10/28(日) 00:21:16.71ID:???
XPathってJavaScript以外で使えたっけ?
jQueryで:hasが使えるならもういらないような
2018/10/28(日) 00:36:19.99ID:???
>>662
なに言ってんだ各言語にライブラリ出てるよXPathくらい…
2018/10/28(日) 08:23:02.53ID:???
>>657
その理屈はおかしい
lengthはProxyがない時代からある
2018/10/28(日) 11:37:15.18ID:???
漏れは、Ruby のNokogiri で、XPath, CSS セレクターを使っている
2018/10/28(日) 13:38:53.56ID:???
>>655
文盲かな?
2018/10/28(日) 13:39:15.20ID:???
>>664だった。
2018/10/28(日) 14:38:20.99ID:???
Proxy APIの話ではなくプロパティが設定されるときに働く
[[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
分かりやすく内部プロキシと言い換えただけなのにね
2018/10/28(日) 22:26:18.35ID:???
漏れ、って久しく見ないな
懐かしい
2018/10/29(月) 09:06:25.00ID:???
>>666-658
同じ言葉をそっくり>>657に返したいね

> Atrayのlengthはset/getが使えなかったときからある。だから>>655
setがなくても、setterとして機能があればsetterだろう
lengthプロパティ代入時に処理が働くのだから、setter以外にそれを実現する方法はない

ついでにいうと、>>654もおかしい
プロパティだからsetterじゃない、とかどの言語の話だ?
2018/10/29(月) 09:11:35.57ID:???
>>668
>>653からどうしてその話が出てくるんだ?
おまえのいってるのは、
Array(1)[3] = 1;
だろう
2018/10/29(月) 10:27:51.41ID:???
Proxyでのハンドリングもsetterと言うのならArray#lengthもsetterと呼んでいいと思うけど
普通JSでsetterって言ったらプロパティディスクリプタがアクセサタイプでsetにメソッドが入ってる状態を言うと思うけどな
2018/10/29(月) 10:29:06.09ID:???
>>671
いや、数値文字列と、lengthの2種類ともを特別に扱ってるんだよ
2018/10/29(月) 12:34:14.87ID:???
>>672
あなたのいう、setterとProxyの違いは何だ?
lengthは余所から書き換えられる場面は多々あるが、lengthそのものはProxyを使うほどの機能があるとは思えんのだが
http://www.ecma-international.org/ecma-262/9.0/#sec-properties-of-array-instances-length
2018/10/29(月) 19:36:10.52ID:???
でlengthはなんて呼んだら良いの?
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/length
これも直した方が良いってこと?
2018/10/29(月) 19:41:22.88ID:???
MDNはprototype経由せずDateやらArray やらから直接生やされたメソッドを静的なメソッドと表現したりクラスベースの人に配慮した柔軟な記述見かけるよね。
2018/10/30(火) 06:56:22.75ID:???
>>674,675
その疑問は全てここまでに書かれてるよ
もう一度読み直してみて
2018/10/30(火) 08:34:44.71ID:???
>>677
> [[DefineOwnProperty]]内部メソッドをオーバーロードしてlengthを書き換えてることを
> 分かりやすく内部プロキシと言い換えただけなのにね

これがProxyの条件か?
ただの内部 プロパティを書き換えるだけでProxy扱い
しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな
679678
垢版 |
2018/10/30(火) 08:40:23.79ID:???
> しかも、Array(19).length = 1; 時に [[DefineOwnProperty]] が書き換わらんし、到底理解できんな

訂正する
Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
しかし、他所のプロパティ [[DefineOwnProperty]] が書き換わるだけで、lengthプロパティはProxyの動きをしていない
2018/10/30(火) 09:16:03.64ID:???
こういう事かな

const a = [];
a[0] = 1; // 668「a[0] はProxyなプロパティです」→OK
a.length = 0; // 668「a[0]を書き換えるa.lengthもProxyなプロパティです」→ん?

この場合、a.lengthを書き換えるa.fooを定義したら、a.fooもProxyになる
Proxyが感染していく
2018/10/30(火) 12:07:55.19ID:???
hey YO! チェケラッチョ!
2018/10/30(火) 12:55:41.57ID:???
>>679
大きな勘違いしてるね、Arrayのインスタンスオブジェクトはlengthと言う通常のプロパティを持っているが
それと同時に数値文字列と"length"という文字列のプロパティ設定に関して特別な振る舞いをするんだよ
つまりProxyのようなのはArrayのインスタンスの事であって、
そのプロキシは"length"プロパティアクセスがあると、間接的にlengthプロパティを設定して配列の要素を調整すると言う動作をするんだよ
ただし、setterとは違うという話
2018/10/30(火) 13:09:50.35ID:???
ようそこまで内部動作把握してるな
こういう人はそんなの当然って言うんだけど大半の人はそんなの無理
2018/10/30(火) 14:08:55.83ID:???
アニメスレに沸く小説板から来た設定厨を思い出しました。
2018/10/30(火) 19:02:56.34ID:???
>>682
勘違いなどしていない
setterのトラップで内部プロパティが書き換わるだけ
setter以外のトラップが必要なら、それを示してくれ
2018/10/30(火) 19:11:18.70ID:???
>>681
やっとわかった
ラッパーって言いたいのかw
2018/10/30(火) 19:19:02.36ID:???
>>686
誰もわかってくれないからって自己レスするな
2018/10/30(火) 19:23:08.67ID:???
>>668は確かにwrapperって感じだが、wrapperとsetterは両立出来るんだよなあ
2018/10/30(火) 20:13:36.59ID:???
わかっててスルーしてるにきまっとるじゃろ
2018/10/30(火) 21:00:05.07ID:???
ぶっちゃけ、>>653がsetterで実装できなくて、Proxyでなければ実装できない機能って何なの?
2018/10/30(火) 21:50:37.00ID:???
>>685
勘違いというか、全く分かっていなかったんだね
実際Arrayオブジェクトのlengthはsetterではないということが話の肝

Arrayのlengthは普通のオブジェクト固有のプロパティだ
Object.getOwnPropertyDescriptor( Array(1), 'length' )
// {value: 1, writable: true, enumerable: false, configurable: false}

参考までにTypedArrayのlengthは共通親クラスから継承したgetterだ
Object.getOwnPropertyDescriptor( Uint8Array.__proto__.prototype, 'length' )
// {get: ƒ, set: undefined, enumerable: false, configurable: true}

ならArrayのlengthへ値を代入したときの振る舞いなどはどう説明するのかといえば、
Arrayオブジェクトのプロパティ設定のトラップでlengthを特別扱いしてるということだ
そしてそれはもちろんsetterとは違う

言い換えればArrayオブジェクトはそのただ1点を除いて普通のオブジェクトと何にも変わらない
[ 'a', 'b', 'c' ]は{ '0':'a', '1': 'b', '2': 'c', 'length': 3 } と全く違いはない
ただたった一つ、[[DefineOwnProperty]]内部メソッドの振る舞いが違う、
プロパティアクセス時に'length'と数字プロパティへの設定を特別に監視するということだけが
ArrayをArrayたらしめてる理屈
2018/10/30(火) 22:04:42.06ID:???
>>679のこの行がそもそもだいぶトンチンカン
>>Array(19)[1] 以降が削除されるので、[[DefineOwnProperty]] は確かに書き換わる
[[DefineOwnProperty]]は内部「関数」なのだから、書き換わったりしない、呼ばれる対象
そしてlength要素に設定時に適宜配列のプロパティが消されるから呼ばれるのではなくて、
length要素設定時にこれが呼ばれたときに間接的にプロパティを消してる、因果が逆
因みにプロパティが消されるときに呼ばれるのは[[Delete]]
[[DefineOwnProperty]] はこの場合関わらない
2018/10/30(火) 23:07:23.33ID:???
>>691
へー知らなかった
694Name_Not_Found
垢版 |
2018/10/30(火) 23:28:54.54ID:ROO+RjWt
そもそも、length に設定するのが、おかしい。
意味不明のソースコード

普通は参照しかしない
2018/10/31(水) 01:25:47.55ID:???
>>694
ザコは黙ってろ
2018/10/31(水) 11:52:21.98ID:???
>>691
勉強になったわ
2018/10/31(水) 15:55:58.36ID:???
new Int8Array([1,2,3]).__lookupGetter__('length')
//=> f length() { [native code] }
[1,2,3].__lookupGetter__('length')
//=> undefined

ほんまやTypedArrayのlengthにはGetter設定されてるけどArrayは無い
2018/10/31(水) 15:56:05.22ID:???
だからtypeof new Arrayは'object'なんだよな
そこしか違いがないから
2018/11/01(木) 02:16:21.76ID:???
大雑把にはわかっていたつもりだったけど
詳しい説明ありがたいわ
700Name_Not_Found
垢版 |
2018/11/02(金) 09:27:19.04ID:33ufQNJG
jQueryの.nextUntil() をJavaScriptで書くのは難しいでしょうか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況