JavaScript の質問用スレッド vol.123 [無断転載禁止]©2ch.net

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 73c8-oPzN)
垢版 |
2017/04/03(月) 00:31:25.68ID:82yaJsi70
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
※前スレ
JavaScript の質問用スレッド vol.122
http://echo.2ch.net/test/read.cgi/tech/1472426483/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/07/08(土) 05:38:53.92ID:5BjTXb8r0
アドバイスもなにもな
JavaScriptとはどういうものかとかHTMLのこととか微塵も分かっていない状態で
そんな身の丈にあっていないサイト使おうとするからそうなる

『餡』は『餡』でもこし餡、粒あんいろいろあるように、君がやってるのは
ideoneは『白餡』を欲しているのに君は『黒餡の饅頭』を与えてるような、論外ものなんだよ

そこは最悪でも饅頭と餡の違い、そして白餡黒餡の違いが分かる人が利用するとこなんだよ
産まれて初めて餡(しかもWeb上の黒餡)を知った人が一人で使うようなところではない
JS実行サイトなら他にもたくさんあるが、君くらいならメモ帳で書いていくので十分なんだよ
2017/07/08(土) 12:06:03.27ID:+tVxWBzW0
>>837
>>789をちゃんと読んで
ideoneじゃなくてhtml書いてブラウザーで動かすんだよ
2017/07/08(土) 12:20:32.49ID:If7Rv9IA0
>>837
サービスは目的に応じて選ぼう
https://jsfiddle.net/sz76xxw3/
2017/07/08(土) 12:44:49.69ID:v/CZ5FQl0
ideone使いにくいよな。
JavaScript以外なら仕方ないのかもしれないけど、
そうでないなら使いたくないわw
2017/07/08(土) 14:30:09.61ID:J5RuKAu7d
何かのアルゴリズムとかECMAScripを試したいときは便利だよ
そうじゃないときは使いにくいというより、使おうと考えるべきじゃない
2017/07/08(土) 16:00:56.38ID:Fv/VLC2ua
>>837
35歳の発達か
2017/07/08(土) 18:57:51.60ID:AHa+5Wfk0
答えて頂いた方、ありがとうございました。

>>838
はい、bracketsで書いていこうと思います。

>>839
すいません、htmlを書くの段階から分かりません…。
少し調べてみます。

>>840
改めてありがとうございます。利用したいと思います。

>>843
そうかもね。
2017/07/08(土) 19:52:07.55ID:VUw5dhen0
paiza.ioでよくね?
何か問題あるか?
2017/07/08(土) 20:00:40.34ID:5BjTXb8r0
一番いいのはね、Webサイトい興味をもってブログとかし始めて、
もっと自由な表現がしたくてHTMLとCSSをかじり、
やがてJSにたどり着くコースなのよ

そうするとね、JSの能力が低くてもHTMLとCSSの能力でカバーして十分に
作りたい物表現できるのよ、
そこから楽しみながら徐々にJSに重点置いていくのも容易

でもね、そういう基盤が全くないというのは、無理とは言わないけど
少なくともここで文字だけで教えるのは容易では無いわ
仮に教えるとしても結局、HTMLやCSS、
もしかするともっと基礎的な知識を身に着けろという話に終始するだけだろうし

JSって確かに簡単な言語だけどね、それはJSを始めようとする人は
HTMLやCSSの知識があるということが半前提でのことなのよ
そして、ブラウザの操作やその他のリテラシーもそれと同じくらい重要
君はまず地道にそういう知識をためていかないと無理があるよ
2017/07/08(土) 20:27:31.78ID:fIuXTSpk0
3日でマスター HTML5 & CSS3、鳥羽薫、2013

この本で簡単に、30ほどのHTML5・CSS3の主要タグが学べる
2017/07/08(土) 21:15:27.92ID:VUw5dhen0
JavaScriptもHTMLもCSSも何も知らないまま入社2日目からWebサイトの改修を先輩への質問なしでさせられて泣きそうでした
849デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/08(土) 23:46:11.44ID:EDp/ROlD0
API用のURL編集ツールとか
URLの解析ツールってあるの?
クエリストリングを作るのが難易度高すぎる。
配列や関数、JSONや コールバック、トークンとか絡んでくるとわけわからん
最終的にはエンコードされて汚ったなくなるし。
2017/07/09(日) 00:11:17.72ID:ODdY4A4c0
クエリストリングを作る?
そんなもんjQueryとかに任せればいいだろ?

> 配列や関数、JSONや コールバック、トークンとか絡んでくるとわけわからん
クエリストリングとは全く関係ない話だ
851デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/09(日) 00:14:11.12ID:LPmXeDzw0
>>850
なんで?

$.ajax({ type: 'GET', url: 'http://', data{}, });
このurl: にクエリストリング引数を指定しないと行けないじゃん。
2017/07/09(日) 00:22:07.43ID:ODdY4A4c0
>>851
ちゃんとexampleみな
https://api.jquery.com/jquery.get/

$.get( "test.php", { name: "John", time: "2pm" } );

こういうふうに書くんだよ。
2017/07/09(日) 05:46:42.70ID:sX6v1jPj0
var url = "http://何々"

// 全体の設定
$.ajaxSetup({
data: {format: 'xml'},
timeout: 60 * 1000
});

$.ajax( url )
.done(function( data, textStatus, jqXHR ) { 処理 })
.fail(function( jqXHR, textStatus, errorThrown ) { 処理 });

こんな感じでも、書ける
2017/07/09(日) 11:35:11.72ID:6p7UXVr5a
>>849
new URLSearchParams を使う方法も有る。
https://developer.mozilla.org/ja/docs/Web/API/URLSearchParams

var params = new URLSearchParams;
params.append('q', 'URLSearchParams');
params.append('ie', 'UTF-8');
console.log('https://www.google.co.jp/search?' + params.toString()); // https://www.google.co.jp/search?q=URLSearchParams&;ie=UTF-8
2017/07/09(日) 11:38:32.00ID:6p7UXVr5a
URLコンストラクタを使った方がいいか。
var url = new URL('https://www.google.co.jp/search');
url.searchParams.append('q', 'URLSearchParams');
url.searchParams.append('ie', 'UTF-8');
console.log(url.toString()); // https://www.google.co.jp/search?q=URLSearchParams&;ie=UTF-8
2017/07/09(日) 13:20:33.93ID:zx3kMPLK0
いや違うんだよ。>>854-855みたいに
クエリストリングを作る必要がないって話。

フォーム使うって手もあるしJavaScriptであれば
普通にパラメータをハッシュまたは配列で渡すだけで
組み立ててくれる。
2017/07/09(日) 14:37:35.20ID:9yQC/vv/0
それはそうするためのライブラリを使えばの話だろ
標準APIのxhrやfetchで使えるのは
Blob,BufferSource,FormData,URLSearchParams,USVString,ReadableStream
だけ
2017/07/09(日) 14:58:54.59ID:zx3kMPLK0
>>857
でもそこに書いてあるのって、特定のブラウザでしか使えないから
結局Polyfillライブラリいれることになるじゃん?
2017/07/09(日) 15:02:30.29ID:zx3kMPLK0
それに>>851の段階でjQuery使うってのは明らかだよね?
2017/07/09(日) 17:11:29.14ID:7vHFYENhM
Polyfillは将来的に外せるものだし、性能差もあるからjQueryと同列に語るのは違和感があるな

ところで、>>851は一例じゃなかったのか
質問者はすべてのコードでjQueryを使って、ajax以外(a要素とか)でURLを組み立てる事がないなら、そうなんだろうな
2017/07/09(日) 17:12:12.99ID:9yQC/vv/0
jQueryの話だったのにJavaScriptであればって話を広げたのは他の誰でもなく君じゃんよ
jQueryならちゃんとjQueryであればって書いてよ
2017/07/09(日) 17:36:25.69ID:7vHFYENhM
「広げた」とは何の話だ?
>>851ではjQueryのコードが出たが、元々の質問はjQueryに限定された問題ではないと思っただけだが
別解が出るだけで取り立てて騒ぎ立てる事でもあるまい
2017/07/09(日) 17:40:04.34ID:7vHFYENhM
ごめん、よく読んだら>>861は俺宛ではなかったな
>862は忘れてくれ...
864デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/09(日) 17:56:45.96ID:LPmXeDzw0
URLSerchParamsや URLコンストラクタなんてのがあるのか。

クエリストリング構築関係って統一した手法が確立されて、
どうしてもフレームワーク依存になってやり方は人によってバラバラ
な感じが否めない。
結局「xx使えばいい」以上のことはいかんとも言い難いことって結構
あるよな、特にJavaScriptはそればっかだ。
865デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/10(月) 02:21:11.80ID:CdB4JEYo0
APIのURLとAPIじゃないURLの違いって何ですか?
2017/07/10(月) 02:35:48.89ID:ahk65wH50
れすぽのちがい
2017/07/10(月) 06:57:20.29ID:bg+Uigm+0
JapaScriptのthisって今でも使われてんの?
それとももう使うのは非推奨になっている?
2017/07/10(月) 10:08:34.12ID:pPp/QbwmM
>>867
つかわなかったら何もできないでしよ?
どうやってクラス内からメンバにアクセスするつもり?
2017/07/10(月) 10:27:44.46ID:eOXntHhA0
余裕で使われてる
2017/07/10(月) 11:14:35.24ID:1OG9NP+7d
何もできない事は無いな
手続き型で書くか、プロトタイプベース駆使してクラスシステム作り直せばね
2017/07/10(月) 14:27:33.65ID:bg+Uigm+0
thisって使いやすい?
thisと言う文法だけで何通りもの解釈がでてきたから
それぞれ新しい文法が新たらに出てこないのかな?
アロー関数が追加されたりasys/awaitが出てきたみたいに
2017/07/10(月) 16:22:07.96ID:x/tMl3Ao0
使いにくい点はあるよ、
個人的な一番は
this.hoge this.fuga this.piyo
とくどく書かないといけないこと
勿論今なら分割代入あたりで展開したり、Object.assignでまとめて代入したりもできるが、
それでも昔っからあるプロポーザルのように
::hoge ::fuga ::piyo
などと書ければなとよく思う

あと直接はthisとは関係ないけど、
プライベート関係で新しい構文は入るだろうね
873デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/10(月) 16:41:07.30ID:CdB4JEYo0
そういやJSにはスタティックの概念がないな。
2017/07/10(月) 18:36:42.76ID:gqDySAuG0
Math.random().toString(34).slice(2)
このコードってどういう意味だと思う?
34ってなんなんや。
2017/07/10(月) 19:29:28.19ID:2duUxTIUa
基数
ググりなさいよ
2017/07/10(月) 20:25:31.79ID:gqDySAuG0
>>875
基数なのはわかるよ。でもその場合は
0-9a-zで36が基数じゃないの?
2017/07/10(月) 20:32:31.99ID:x/tMl3Ao0
間違いか、34*34通りあれば十分だったんじゃないの?
2017/07/10(月) 21:44:19.17ID:pPp/QbwmM
他人のコードなのに奇数なら36のはずだと勝手に決めつけ思い込む脳神経ってどうなってるんだろうね
2017/07/11(火) 00:08:12.63ID:DtGvVlsG0
質問です。
変数を宣言する際に記述するvarは省略することが出来るのでしょうか?
私の買った本だと、書かれていたり、省略されていたりして
混乱気味なのですが…。
2017/07/11(火) 00:10:33.39ID:i4eD5D7P0
出来るけどグローバル変数になるのでよっぽどの場合以外は使わないようにしましょう
2017/07/11(火) 00:27:18.10ID:DtGvVlsG0
>>880
ありがとうございます。一応出来るのですね。

っていうかあの本ダメだぁ。そういう必要な説明も端折ってる…。
2017/07/11(火) 01:10:06.11ID:OLy+oHXE0
>>881
クロージャ内変数を掴みに行っているのが見えてないだけだろ。

韓国人死ね

てかマジで他もいろいろ酷いがデタラメ答えるな。
スレのレベルが下がっているのはお前らにも分かるだろアホ共。
もう既に間違いも大量に放置されている。こういうのはお互いに利益無いと知れ。
馬鹿な韓国人には何度言っても通じないようだが。マジで死ね。
2017/07/11(火) 01:56:20.34ID:DtGvVlsG0
>>882
ありがとうございます。

ところでなんでそんなに韓国人が嫌いなんですか?
イボミとか良い人もいるじゃないですか?
884デフォルトの名無しさん (ワッチョイ b723-BL37)
垢版 |
2017/07/11(火) 02:20:56.58ID:kTultHtx0
XMLHttpRequestとクロスドメイン参照と
JSONPとcallbackを
郵便屋さんで例えてください。
2017/07/11(火) 03:14:02.76ID:jfrWcBvE0
郵便屋でーす
2017/07/11(火) 04:47:03.01ID:DVbjq/Wb0
>>879
この両者には僅かな違いがあります。
varを使って宣言する(var a = 10)とその変数はグローバル変数となり
varを使わずに宣言(a = 10)するとまずスコープチェーンを
辿ってaを検索し、aが存在すればaに代入を試みて、
aが存在しなければ、グローバルスコープにaプロパティを追加します。
(グローバルプロパティの生成)

開眼!Javascript
p81
https://jsfiddle.net/jseja/6Xyh3/
2017/07/11(火) 04:54:08.93ID:DVbjq/Wb0
>>881
悪書は追放するから
タイトルと筆者を書いて欲しい。
2017/07/11(火) 08:43:35.93ID:Yw0oNP1jd
>>876
yとzは制御文字として使いたいとか。
2017/07/11(火) 11:27:38.46ID:xvQ/lQkn0
WebでのJSの実行環境は
with(window){}
で囲まれているようなものだからね

でも今からはModuleの時代だしそういう癖つけないほうが良いよ
2017/07/11(火) 23:25:29.24ID:DtGvVlsG0
>>886
ありがとうございます。基本的には付けた方がいいんですよね?。

>>887
筆者が気の毒なので一応伏せておきます。
悪書まではいってない気がするので。
2017/07/12(水) 01:07:25.34ID:VV5TEq59M
>>890
情報共有するきがないなら参加するなよ
おまえと同様にその本を買ってしまって混乱する犠牲者ふやしたいのか?
2017/07/12(水) 03:02:30.48ID:JRRJcnxl0
>>890
そういう体質が悪い方向に向かわせているんだが
これが親切のつもりらしいから呆れる。
2017/07/12(水) 03:04:27.14ID:JRRJcnxl0
こっちは有料の本の中身の情報を
タイトル名、ページ番号
その中身の一部引用までして
書き込んでいるのに
こちらの要望は軽く無視された・・悲しいわぁ・・・
894デフォルトの名無しさん (ワッチョイ ffaa-PX3H)
垢版 |
2017/07/12(水) 06:38:54.28ID:HQm2gXhD0
>>886
var 無しだと、グローバルプロパティだから、
スコープチェーンをたどるから、ややこしい

チェーンをたどって見つからなければ、最終的にグローバルプロパティで、
グローバル変数とは別のもの

こんなややこしい仕様を作った、JSの作者は、頭おかしい
2017/07/12(水) 07:28:39.75ID:46U9BX050
varはもう使うな。
constかlet使え
2017/07/12(水) 07:46:53.52ID:m006016La
letが使えないブラウザ向けに作ってる人もいるんです!
2017/07/12(水) 08:57:04.34ID:Xbh+81Re0
>>894
グローバルプロパティとグローバル変数は同じものだよ
グローバルオブジェクトがグローバルスコープになってるわけだからね
with文を使ったときと同じ
2017/07/12(水) 09:46:28.42ID:JRRJcnxl0
>>897
残念ながら少し違います。
普通の人は違いを意識する必要はありませんが。
>>886
2017/07/12(水) 10:33:07.51ID:Xbh+81Re0
いや、var付きかどうかには違いがあるけど、
グローバルオブジェクトのプロパティとグローバル変数は同じものだよ
スコープにはオブジェクト型ってあって、with文のスコープとグローバルスコープはそうなってるから
2017/07/12(水) 11:12:26.90ID:JRRJcnxl0
>>899
>>886って書いたじゃん
微妙に違うんだよ。
https://jsfiddle.net/jseja/6Xyh3/
で違いを見てみ?

実際に使う時には意識する必要のない違いだけどさ。
2017/07/12(水) 12:40:32.42ID:MU+9qUhDd
だからそれはvarの効果であって、グローバルスコープは
グローバルオブジェクトのオブジェクト型スコープだから
そこに対する参照は全てグローバルオブジェクトへの参照へリダイレクトされるんだよ
つまりグローバル変数とグローバルオブジェクトのプロパティは同じもの
varで宣言すれば属性が変わるが存在するのは同じ場所
2017/07/12(水) 13:31:19.76ID:JRRJcnxl0
じゃあ他人のコードをレビューする時、
deleteは無視しても挙動は変わらないんだな?
2017/07/12(水) 13:52:48.55ID:JRRJcnxl0
やめたやめた、絡むだけ時間の損だわ。
904デフォルトの名無しさん (ワッチョイ 57d8-hKQV)
垢版 |
2017/07/12(水) 14:42:40.12ID:JRRJcnxl0
なぜイライラしたかわかった
多少の挙動など気にしない>>879この本の作者と同じ考えのやつだからだ
質問者が細かい違いを気にしてたのに
>>901はそんな細かいことを気にせずテキトーでいいんだよと返してたんだからな。
こっちはきっちりしただけだっちゅーねん。
2017/07/12(水) 15:11:57.05ID:LVxqEvY9H
お前の書き込みが俺をイライラさせる件についてはどう思うんだ
2017/07/12(水) 15:53:52.86ID:Xbh+81Re0
>>904
おれがいつそんな細かいことを気にせずテキトーでいいと言った?
俺はここの住人の中でもっとも細かいことが気になる人間だぞ?

だからむしろ、お前はスコープと変数の扱いの仕様レベルのことが分かっていないんだから、
言い回しに気をつけろと超細かいことを言ってるんだよ

いいか、グローバル変数とグローバルプロパティに差なんてない、両者は同じもの
ただvarで宣言するとconfigurableがfalseになるからdeleteできない、それだけなんだよ
2017/07/12(水) 16:13:36.51ID:HQm2gXhD0
グローバルオブジェクトは、唯一無二のシングルトン

グローバル変数は、グローバルな変数

グローバルプロパティは、グローバルなプロパティだから、delete で削除できる

これら、3つは別のもの
2017/07/12(水) 17:33:04.93ID:VV5TEq59M
要するに、普通のオブジェクトでのルールをグローバルオブジェクトにも適用して例外をなくしたからぱっと見で意味が分からない仕様になってるんだろうなぁ
全てがグローバルオブジェクトの中の出来事と思えばさほどおかしい仕様ではないが他言語からは理解しがたい不思議な世界かもしれない
2017/07/12(水) 17:35:19.86ID:VV5TEq59M
仮にグローバルオブジェクトの外からそれらを見ることがあるなら、グローバルプロパティと変数の差はもっとわかり安いだろう
2017/07/12(水) 18:06:03.89ID:VV5TEq59M
とにかく開発時には、verもしくはthis(orなにかしらのオブジェクト)にドットで繋いで変数宣言しないとだめって事だな

それ以外の宣言だとぱっと見だと判断のつかない所属の変数になってしまう事がある
それはJSとしては正しい挙動だが、わざわざそんな事を狙ってやるやつは居ない
大抵はミスでそうなるケース
2017/07/12(水) 18:07:07.39ID:HQm2gXhD0
JSが難しい理由は、var, new の有無で、意味が変わってくる所。
ちょっとした書き間違いで、動作が異なる

しかも、コンパイルエラーにならないで、
しばらくしてから違う箇所で、実行時エラーになる

実装者向けの機能が、むき出しで、一般のプログラマーまで、
それを習得しないといけなくなってる

すごく、インタープリター内部の話まで、しなければならない。
それで、Ruby よりも、かなり難しい
2017/07/12(水) 18:24:56.67ID:VV5TEq59M
JSはフリーダムすぎるんだよね
誰も使わないような自由があちらこちらにあって、それがケアレスミス時の落とし穴になるという
いろいろ作ってて理解不能なエラー挙動に直面して、ウォッチで追って行って「そんな仕様だったのかよ。。。」とあとから気づくことも多かった
2017/07/12(水) 19:23:00.20ID:Xbh+81Re0
まあnew演算子の挙動は理解しとかないといけないだろうな
旧クラスシステムは、関数にデフォでprototypeメソッドが生えることを除くと
完全にnew演算子の力だけで成り立ってることを一旦理解すれば
newの有無で〜とか言う発言はなくなる

だってそもそもnewは演算子なんだから、そりゃどんな演算子でも飛ばせば動作が変わって来るのは当然だし
2017/07/12(水) 19:32:20.46ID:46U9BX050
ここにいる人たちってeslintとか使ってないんか
2017/07/12(水) 19:49:51.64ID:svcC79vd0
勉強にはなったと思う

しかしグローバルプロパティを
deleteしようとすることは
俺の仕事内容的にはまずないだろうな……
2017/07/12(水) 20:12:49.78ID:HQm2gXhD0
new Number()
Number()

new を付けると、オブジェクトで、
無しだと、プリミティブになるとか、

ちょっとした変化を付けているから、困る。
ちょっとした書き方の変化で、色々と出来るようにしているから、ややこしい
2017/07/12(水) 20:39:54.78ID:Xbh+81Re0
取り敢えずクラスはクラス構文で書けばいい
そうすればnew無しでは呼べない
2017/07/13(木) 03:17:56.06ID:UhYYQlFzd
>>907
違う違う、いい加減仕様読みなって
グローバルに変数作ろうとするとグローバルオブジェクトのプロパティを作成することになるの
その時var宣言付きだとconfigurableがfalseになるからdeleteできない
ただそれだけでグローバル変数とグローバルプロパティに区別はない
2017/07/13(木) 06:48:46.09ID:1ML2Rzf1M
>>918
自分で言ってて矛盾してると思わないの?
2017/07/13(木) 07:01:17.86ID:qKiU4eWA0
何も矛盾していない
矛盾してると思うのは君の前提知識が誤ってるから
そしてそろそろ仕様を読め、この順で
わからないところがあったら説明してやるから
https://tc39.github.io/ecma262/#sec-globaldeclarationinstantiation
https://tc39.github.io/ecma262/#sec-createglobalvarbinding
https://tc39.github.io/ecma262/#sec-global-environment-records
https://tc39.github.io/ecma262/#sec-object-environment-records
2017/07/13(木) 08:33:49.98ID:1ML2Rzf1M
>>920
なぜ変数とプロパティの違いすら分からないの?
両者は全然ちがうだろ
グローバルだけはスコープチェーンの最終地点だから使用する際の挙動に違いがほとんど無いだけ
これはたまたまそうなってるだけであり、「区別がない」なんて無知にもほどがあるだろ
2017/07/13(木) 13:51:12.12ID:oJKwR9xkM
>>907
つまり、こういう事か?

- delete演算子で削除できるものが「グローバルプロパティ」
- var 宣言したものは「グローバル変数」

オレオレ定義にしか思えんのだが、該当する仕様のURLを教えてくれ。
2017/07/13(木) 14:05:18.85ID:oJKwR9xkM
>>921
var宣言してもグローバルオブジェクトのプロパティになるからでは?

<script>
var a = 1; // グローバル変数
console.log(this.a); // グローバルオブジェクトのプロパティ
</script>

だから、これは「グローバル変数でもグローバルオブジェクトのプロパティでもある」という認識が正しい。
彼が指摘しているように、仕様を読んだ方がいい。
2017/07/13(木) 20:28:17.30ID:fMgp1qch0
トップレベルでObject.getOwmPropertyDescriptor(this, 'v')
すりゃ>>918が正しい事が確認できる
2017/07/13(木) 21:06:35.19ID:+QqE9gTA0
スレ違いだったらすみません。

JSの勉強として既存のスクリプトを読んだりしているのですが、どうしても理解できない点がありまして、
よろしければご教示お願いできないかと思い書き込ませていただきました。

読んでいるのは以下のプロジェクトの /lib/marked.js となります。
JSの勉強に加えて、似たような処理をするスクリプトを組む参考にもなると思い選びました。
https://github.com/chjj/marked

当該スクリプトの下部で定義されている replace という関数に含まれている以下の文が、何を目的として存在しているのかが分かりません。
val = val.replace(/(^|[^\[])\^/g, '$1');

もしお時間ありましたら、どなたか解説お願いしても構わないでしょうか?
2017/07/13(木) 21:15:07.43ID:OmneFwIKa
性器表現
2017/07/13(木) 21:42:50.08ID:7UlgIumN0
他人のソースコードを読んでも、作者にしか分からないから、
時間が掛かるだけで、何にもならない。
自分で作った事だけが、自分を成長させる

それに、どうせ読むなら、John Resig 作の jQuery、
Jeremy Ashkenas 作の Underscore.js など、すごいライブラリを読みなよ

正規表現 - MDN
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Regular_Expressions
2017/07/13(木) 22:41:06.52ID:7UlgIumN0
var str3 = str.replace(/(^|[^\[])\^/g, '$1');

g フラグは、一致するだけ、複数にマッチする

$n は、( )で囲んだ部分に、一致した部分。
$1 は、1つ目の( )、$2 なら、2つ目の( )

^ は、文字列の先頭に一致する。^A なら、先頭がA。
ただし、[ ]の先頭にあると、否定の意味になる

[abc][a-c]は、a, b, c のどれかの1文字に一致するが、
[^abc]は、a, b, c のどれかの1文字に一致しない文字を表す

\ は、特殊文字をエスケープする。
特殊文字の意味をなくして、通常の文字として扱う。
\^ なら、^ の特殊な意味をなくして、単に、^ 文字を表す

\[ なら、[ 。
[ ] の中で、[ を使えないから、\[ と書いている。
つまり、[^\[] は外側の、[ ] を外すと、^\[ となり、[ 以外の文字

| は、どちらかの文字を表す。A|B なら、A か、B

(^|[^\[])\^ は、1文字目が、^ または、[ 以外の文字で、
2文字目が、^ にマッチする。
$1 で、( )内は、1文字目だけを取り出す
2017/07/13(木) 22:41:29.60ID:7UlgIumN0
var str = "a^^b";
var str2 = str.match(/(^|[^\[])\^/g);
var str3 = str.replace(/(^|[^\[])\^/g, '$1');
console.log(str2, '\n', str3);

str2は、a^ で、$1 は、( )内だから、a だけを表す。
replaceでは、a^ を、a で置換するから、str3は、a^b となる
2017/07/13(木) 22:53:39.59ID:qKiU4eWA0
>>921
順を追って書いていくからどこで引っかかるか教えてくれ

変数はEnvironment Recordという構造体に保存される
Environment RecordにはObject型があって、そこでは変数はオブジェクトのプロパティとして保存される
グローバルスコープのEnvironment RecordはグローバルオブジェクトをベースとしたObject型だ
グローバル変数はグローバルオブジェクトのプロパティとして保存される
2017/07/13(木) 23:24:43.34ID:2zl2aPWN0
>>925が超初心者と想定した説明を。

例えば入力された電話番号をチェックしたい場合、有効な電話番号を10桁の数字とすると、
if (phoneNumber == "0000000000" || phoneNumber == "0000000001" || ......)
と書いていては現実的に不可能です。
正規表現は文字列の法則を示したもので、replace関数の親戚のmatch関数で、
if (phoneNumber.match(/[0123456789]{10}/))
と書けば、"0000000000"〜"9999999999"までをカバー出来ます。
[0123456789]はより単純に[0-9]と書くこともでき、この部分は0〜9の数字1文字を示しています。
その後に続く{10}はそれを10回繰り返したものという意味です。
実はこれでは不完全で、この正規表現では10桁の数字さえあればよく、
例えば11桁以上の数字や、"0123456789A"や"A01234567890"みたいな文字も通ってしまいます。
そこで先頭に^をつけることによって、数字から始まることを示し、
最後に$をつけることによって、10桁で終了することを示せば、期待通りになります。
if (phoneNumber.match(/^[0-9]{10}$/))

さて本題ですが、上のmatch関数もそうですが、replace関数の1番目の引数は""で囲っていなく//で囲っています。
これは文字列ではなく、正規表現オブジェクトを渡していて、matchやreplace関数ではそうするもんだと思って下さい。
文字列変数valにある、(^|[^\[])\^という正規表現で示される部分を、(2番目の引数の)$1に置き換えるという意味です。
$1というのは、正規表現の後方参照と呼ばれるもので、正規表現の1番目の丸括弧()の中を指しています。
(^|[^\[])\^という正規表現なので、(^|[^\[])の部分が$1になります。
(^|[^\[])\^を(^|[^\[])に置き換える。つまり、丸括弧の外にある\^の部分を削りたいわけです。
/(^|[^\[])\^/gと書いてますが、このgというのは、正規表現のフラグの1つで、一致したもの全てを置き換えるという意味です。
もしgがない場合、一致した最初の1つしか置き換えられません。
大文字小文字を区別しないフラグなど、フラグは他にもいくつかあります。

初心者に正規表現は難しいので、(^|[^\[])\^がどういう意味なのかは時間をかけて勉強してみて下さい。
2017/07/13(木) 23:38:29.43ID:ZRvPs5t50
>>928
というかその正規表現はおかしいだろ。
JavaScriptではエラーにならないし、
よくあるサイト上でのチェックでも実際のJavaScriptで動作させているから動いてしまうが。
チェッカーを探したがいいのが無いね。

> (^|[^\[])\^ は、1文字目が、^ または、[ 以外の文字で、
意味的におかしいだろ。^ は [ 以外の文字なんですがそれは?

君が勘違いしているのは下記か?
/(\^|[^\[])\^/
が、まあ、これが意味ないのは上記の通り。意味があるようにするとしたら以下か?
/(^\^|[^\[])\^/


韓国人死ね
2017/07/13(木) 23:54:34.87ID:gzfFo6hjd
>>932
『「行頭」か「[以外の文字」』に続く^じゃないの?
^
[^
にマッチさせたいのでは?
2017/07/14(金) 00:09:24.28ID:jwaA4OPc0
そもそも、この正規表現は正しいのか?
2017/07/14(金) 00:24:01.50ID:jsZNOhnp0
>>933
え?それってありなん?
まあ俺は正規表現のプロではないが。
そして試してみた結果、確かにそのようだが、ものすごく気持ち悪い。

'^'.replace(/(^|[^\[])\^/g,'$1'); // ''

これってマジでありなん?しかもカッコ内じゃないのに置換されてるし。


韓国人死ね
2017/07/14(金) 00:36:41.22ID:i0uGqEt60
^が行頭を表すなんて朝鮮人以外はみんな知ってる
2017/07/14(金) 01:07:53.54ID:+/3l0vud0
さわんじゃね
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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