トップページ⇒tech
1002コメント464KB

+ JavaScript(ECMAScript)質問用スレッド vol.122 + [無断転載禁止]©5ch.io

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/08/29(月) 01:23:24.09ID:MUTWRWKo
プログラマ板の趣旨にあわせてブラウザ限定ではなくサーバーサイドJavaScriptや
トランスパイラなどの関連技術の話題も取り扱うように変わりました。

ECMAScriptの言語仕様の話題。最新ECMAScriptによるモダンな書き方、Promiseやasync/awaitを
使った非同期プログラミング。ES2015、2016、2017等の最新ECMAScriptをブラウザで今すぐ使う方法、
ビルド環境やbowerやnodeのパッケージを使う方法等、モダンなJavaScript環境についての幅広い話をしましょう。

ECMAScript対応実行環境一覧(ブラウザやbabelを含む)
http://kangax.github.io/compat-table/es5/
http://kangax.github.io/compat-table/es6/ (= es2015)
http://kangax.github.io/compat-table/es2016plus/
http://kangax.github.io/compat-table/esnext/

JavaScriptとは?
もともとMozillaの前身のNetscapeが作った言語であり本来のJavaScriptはFirefoxの実装のみです。
JavaScriptの正式な仕様名はECMAScriptです。ですが一般に使われているとおり
ChromeやEdgeで使う言語もJavaScriptとしてこのスレでは扱います。
Firefox等のJavaScript実装は最新のECMAScriptに準拠しています。

※DOMはブラウザが提供しているものでありJavaScript(ECMAScript)の範囲外です。
なのでDOMを使ったプログラミングは原則としてこのスレの対象外です。
DOMはwindowオブジェクト(ブラウザのホストオブジェクト)経由で
参照するもので、window自体、window.document、window.Workerなどです。
これに関する話題はWeb制作板の下記のスレに移動してください。

+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1467906819/
+ JavaScript の質問用スレッド vol.130 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/hp/1463395557/

前スレ + JavaScript の質問用スレッド vol.121 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1468158373/
0369デフォルトの名無しさん2016/09/03(土) 22:35:25.80ID:EZVA2rF2
>>367
だから、そうやって重要な単語を抜き取って焦点をぼかすのはやめろ。

とある言語の、サブセット同士が違うものであっても
それはとある言語のサブセットであって、言語としては同じだろうが。

BASICはどの実装でもBASICであり
COBOLはどの実装でもCOBOLだ。
0370デフォルトの名無しさん2016/09/03(土) 22:37:05.23ID:EZVA2rF2
>>366
> よくArrayのサブクラスとか作らないで済むね?

といわれてもね。長年やってるからね。
長いES5の時代にArrayのサブクラスをつくらないで
やってきた人間に、そんなこといわれてもねw

その他も同じ。

お前のほうがやってきた経験少ないんじゃね?
0371デフォルトの名無しさん2016/09/03(土) 22:41:45.37ID:EZVA2rF2
>>366
そうだな。君、何かのポリフィルを自分で考えたことある?
特定のブラウザでは簡単にできないことを、
別の方法を使って実現するってことをやったことある?

そういう経験がないんじゃないかな?
バッドノウハウといわれるけど、仕事ではそれをやらないといけない。

Arrayのサブクラスが作れないからできませんって
簡単に泣き言を言ったらだめだよ。

Arrayのサブクラスを作ることが目的になることはまずない。
別の方法で顧客の要求を実現するんだよ。

これって発想力の問題かなぁ、それとも問題解決能力?
0372デフォルトの名無しさん2016/09/03(土) 22:56:19.81ID:N47o0j5/
>>370
当然俺もいきなり活用できたわけじゃない。
折角の機能活用できるようになろうとここ1,2年実験・研究を人一倍積み重ねてきたのよ。

いや、違うか。それより前から、特にES4の頃からかなぁ
JSなんてと言われる声が大きかった時でも、
これからはJSの時代だ。JSを深く知ろう、そしてJSの良さをもっと知ってもらおう。
JSを良くしていこう。とずっとずーっと思ってたのよ。

だからES6の盛り上がりには喜んだし、
MLも当初から参加して全て読んで、細部だが提案にも参加した。

そして実装される前から、トランスパイラではなく、エンジン毎実装されているエミュレータでテストしたりしてきたのよ。
ブラウザに機能がコミットされたら、いやされる直前に自分でローカルでコミットして即ビルド。
とにかく誰よりもよくES6を知り、よく使えるようになろうと努力した。

というのは多少大袈裟だが、そのくらいの熱はあるよ。
0373デフォルトの名無しさん2016/09/03(土) 22:59:14.75ID:N47o0j5/
つかArrayのサブクラスもできるんだけどね。
__proto__がサポートされていれば。
0374 ◆SEdFBOkLSw 2016/09/03(土) 23:12:05.52ID:YIu9WVDu
>>369
いや、それは言語名を拡大解釈しすぎだろ。
0375 ◆SEdFBOkLSw 2016/09/03(土) 23:14:31.28ID:YIu9WVDu
>>371
お前どう聞いてもそのノウハウないんだけど。
なんか書いたことある?アーキとしてライブラリ。

>>368
うん、文法上無理なものは、無理に使わないよ。

ライブラリはブラウザごとに違うよ?
当たり前だけど、そのブラウザ用に書いてるからパフォーマンス高いよ(笑)
0376デフォルトの名無しさん2016/09/04(日) 01:41:38.94ID:dQFc65WQ
そもそも、ブラウザのソースをむっちゃ細かく読み、ブラウザごとに誤差レベルのパフォーマンスのためにプログラムをかき分け、利用者にはKBのバージョンまで指定する
そんならネイティブで書いたほうがいっそ早くね?
0377デフォルトの名無しさん2016/09/04(日) 01:42:25.34ID:dQFc65WQ
↑ネイティブっていうのはブラウザ上じゃなくてって意味ね

それだと今度はOSのソースを読み出すのかな?
0378 ◆SEdFBOkLSw 2016/09/04(日) 02:09:57.16ID:OwMR9jkC
>>376
クラサバの話?
だいたい似たようなもんだよ。
社内端末は、何処の会社でもそうだろうけど、標準品のパターンしか無いから。
クラサバは基本的にはあんまり作らんけどね。
標準品があるがゆえにが、何かにもインストールするのは難しい。

毎月10日に数万人が同時使用するようなものもあるから、ウェブ向きのもあるんだけどね。
0379 ◆SEdFBOkLSw 2016/09/04(日) 02:11:11.84ID:OwMR9jkC
>>377
案件次第だけど、RedHatと、MSは調査させることができる保守契約だから、
ソースは見なくて済むよ。
0380デフォルトの名無しさん2016/09/04(日) 02:40:24.68ID:dQFc65WQ
よくよく考えると、ハードウェアにも依存するよね
テストだけじゃなくてソースまで読むとなると、CPUとかグラフィックカードの設計図まで見ながら実装や結果が異なるかもしれない!とか言いながら開発してるのかな?

これとかは面白かったな
https://www.sophos.com/ja-jp/press-office/press-releases/2014/12/ns-browser-fingerprints-the-invisible-cookies-you-cant-delete.aspx
0381 ◆SEdFBOkLSw 2016/09/04(日) 02:52:39.61ID:puAB8LUN
ハードウエア依存するね。
そのへんはウェブ屋がよくまとめてくれてるよ。
このCSSをONにしたら、アニメーションがGPU使ってる行われるので、適宜利用可能そうであれば取り込んでください、とかたまり来るな。
0382デフォルトの名無しさん2016/09/05(月) 21:45:07.44ID:g6CwjeFO
こういうwebアプリってどうやってつくってるんですか
pdgを縮小とかって、どうやってやってるのでしょうか?
javascriptは関係ありますでしょうか?
https://smallpdf.com/jp
0383デフォルトの名無しさん2016/09/05(月) 23:05:01.84ID:La2BdvKf
void func(int a)
{
0384デフォルトの名無しさん2016/09/05(月) 23:10:26.66ID:La2BdvKf
未使用変数への対処ですが、C言語だと

void func(int /*a*/)
{
....
}

void func(int a)
{
(void)a;
....
}

こんな風にしますが、JavaScriptだと定石みたいなのはありますか?

$('#element').on('mousedown', function(/*event*/) {

});

でよさそうな気がしますが、アロー関数の時は

$('#element').on('mousedown', /*event*/() => {

});

こんな風にしないとだめでかっこ悪いきがします。
0385デフォルトの名無しさん2016/09/06(火) 00:15:41.30ID:vTB9MQXO
>>384
未使用変数を必ず対処しないといけないということはない。
例えばイベントハンドラで引数にeventやeを取るのは「形」だ。
型宣言みたいなもんで、それを書いてあるからといって必ずしも
eventを利用しないことは皆知っている。

むしろその関数が別定義されていても、eventを受ける関数、
イベントハンドラの定義なんだと瞬時にわかるので意味がある。

つまりイベントハンドラとしてイベントを受け取るということだけで、
機能が満たされて意味的に「未使用」ではないとも見れる。
もしくは本当にイベントをトリガーとして関数を呼び出したいだけであれば、
引数を書かないでおくべき。

コメントアウトする文化はないのでけしてしてはいけない。
上で述べた引数をあえて書く、書かないは、関数の機能やニュアンスを表すための
弱い動的型付け言語における読み手に対する情報の追加だ。

しかしコメントアウトは書き手にとってのメタ的な情報でしか無い。
読み手に未使用変数の情報を伝えても何のプラスにもならないし、
何らかのニュアンスの提示かと思わせて混乱させるだけだ。
0386デフォルトの名無しさん2016/09/06(火) 03:32:45.25ID:R2NwcGdU
キモい ◆SEは死んだ?w
0387デフォルトの名無しさん2016/09/06(火) 03:37:28.46ID:s5Bd4cPT
>>384
使用してない変数なら書かなければいいだけ。

使わないのに引数を省略出来ないっていうのは
C言語特有の問題だ。C言語特有の問題を持ち込まないように
0388 ◆SEdFBOkLSw 2016/09/06(火) 08:18:45.82ID:aJS2GtR8
>>386
そんなに否定されるか不安なのか?
>>384
その定石は要はコンパイラが未使用変数だよ、と警告上げてくるから、使ってるフリするやつじゃないの?

長々誰かが説明してるけど、結論どっちでも良いよ。
書いても書かなくても。
0389デフォルトの名無しさん2016/09/06(火) 09:41:59.19ID:KC/iVCRe
>>385, >>387, >>388
ありがとうございます。
すみません、言葉足らずでしたが、>>388さんの通りC言語の
コンパイラの警告と同じような意味合いでの
eslintなどのunused-varsへの対処方法の相談でした。

引数消せばそれで良さそうとは思いましたが、それだと>>385さんの通り
eventとか意味を持った引数がわかりにくくなりそうなので、定石みたいなのはあるのかなと。

結論はどちらでも良いとのことで好きなようにやっておきます。
0390デフォルトの名無しさん2016/09/06(火) 13:11:41.52ID:vTB9MQXO
>>389
一番いいのはそういう警告は殆どOFFにするか、無視すること。
正直言って本当に厄介なバグは見つけてくれない気休め程度のもの。
気休めに気を使うことくらい馬鹿らしいことはないと思わないか?

どちらでもいいと言われてるのは書く/書かないであって、
コメントアウトは3つの選択肢の中では最低と思った方がいい。
0391デフォルトの名無しさん2016/09/08(木) 07:45:15.23ID:O7PwNYbW
プロミスって簡単に探したら、種類がいっぱい有るんですね。
現在対象にしているのが、WinJS。
timeoutなんてのが有って驚いた。
これだと非同期ロジックにシーケンス書ける。
0392デフォルトの名無しさん2016/09/08(木) 14:31:46.31ID:OkMPKk85
標準Promiseは機能が少ないので、async/awaitを使って補うのがベストプラクティス。
もしくはextendsしても良いが、やや大変で難しいと思う。
一応キャンセルの案は入るのでtimeoutとかは簡単に実装できるようにはなる。
CancelToken型になりそうなのがまたちょっとアレだが、まあ拡張としては最適なのだろう。
https://github.com/tc39/proposal-cancelable-promises/blob/master/Cancel%20Tokens.md
0393デフォルトの名無しさん2016/09/08(木) 23:37:57.85ID:Vzj7Ghpg
ちなみにasync/awaitに対応しているブラウザは少ないので
必然的にbabelを使うということである。
0394デフォルトの名無しさん2016/09/08(木) 23:41:49.64ID:Vzj7Ghpg
なお、俺はasync/awaitを使いたいならbabelと言っただけで
async/awaitを使うと機能が増えるとは言ってない。
その話は言ったやつに聞け
0395デフォルトの名無しさん2016/09/09(金) 00:04:44.99ID:4wEFuM4p
>>393
ブラウザの話だけでいうのもどうかと思うよ。
WinJSが出てくるのならNW.jsとかNode系V8系の環境の話も十分考えられる。
V8系ならフラグオンで使えるわけだからね。

というかすぐ、互換性が〜とか言い出したり、実務を必ず伴わせようとするのは悪い癖だと思う。
ここはESスレなんだし、仕様やAPIの宙に浮いた話だって良いじゃない。

web制作板だったら確かに互換性や実際に世のブラウザで動く話は無視できないかもしれないけれど、
ここはプログラム技術板なんだし、
JSはそれこそ自分用のブラウザ拡張機能を作るためだったりするのにも使えるわけだし、
別に実験や遊びとしてこういった技術を扱う前提であってもいいと思う。
0396デフォルトの名無しさん2016/09/09(金) 16:45:04.06ID:dcApvFQ/
lengthって名前の関数を作るときなんですが、

var Sample = function() {
      this.length = function() {
          return 100;
      }
};
Sample.length = function() {
    return 100;
};

let sample = new Sample();
console.log(sample.length()); // これは OK
console.log(Sample.length()); // これは エラー

っていう動作になるのはこういう仕様でしょうか?
0397デフォルトの名無しさん2016/09/09(金) 16:46:02.70ID:dcApvFQ/
すみません、 使えなかった
こちらです。

var Sample = function() {
  this.length = function() {
    return 100;
  }
};
Sample.length = function() {
  return 100;
};

let sample = new Sample();
console.log(sample.length());
console.log(Sample.length());
0398デフォルトの名無しさん2016/09/09(金) 17:42:46.36ID:mXWYcTT5
何がしたいの?w
0399デフォルトの名無しさん2016/09/09(金) 18:03:02.38ID:dcApvFQ/
>>398
具体的には
VectorUtil.length = function(x, y, z) {
  return Math.sqrt(x*x + y*y + z*z);
};
これがしたかったです
0400デフォルトの名無しさん2016/09/09(金) 19:06:00.54ID:R/34hIbI
Function.lengthは引数の数で定義済なんで無いの
0401デフォルトの名無しさん2016/09/09(金) 19:15:39.77ID:4wEFuM4p
>>399
class構文を使えばできる。
class Sample {
static length() { return 100 }
}
Sample.length()
0402デフォルトの名無しさん2016/09/09(金) 21:42:09.18ID:mcpsSWXB
画像収集の際にGreasemonkeyを利用してa要素+download属性を生成し、
整理しやすいように画像掲載ページのタイトル等から名前をつけて保存しているのですが、どうにかしてクロスドメインの画像に対してもリネームさせられないものでしょうか?
iframeを利用するというのも試してみましたが、元ページ側のタイトル変数などを受け渡すことが出来ず挫折してしまいました
0403デフォルトの名無しさん2016/09/09(金) 21:52:24.77ID:dcApvFQ/
>>400
そういう仕様っぽいような気がしました。
なぜ上書きできないのか、わかってないですが。

>>401
なるほど、ありがとうございます。
classって糖衣構文だと思ってるんですが
内部的にはどうやってるのでしょう(調べてみます)
0404デフォルトの名無しさん2016/09/09(金) 22:11:57.62ID:4wEFuM4p
>>なぜ上書きできないのか
[[Writable]]: false だから
https://tc39.github.io/ecma262/#sec-functioninitialize
ただし[[Configurable]]: true なのでディスクリプタセット系メソッドで上書きはできる

>>内部的にはどうやってるのでしょう
コンストラクタが定義され、その時点では上記のようにlengthプロパティを持っているが、
その後PropertyDefinitionEvaluation→ディスクリプタセット系によって上書きされる
https://tc39.github.io/ecma262/#sec-runtime-semantics-classdefinitionevaluation
0405デフォルトの名無しさん2016/09/09(金) 22:27:00.10ID:Ml2lLB3N
>>403
babelで変換したらこうなったよ。
Object.definePropertyが鍵のようだ。
"use strict";
var _createClass = function () {
 function defineProperties(target, props) {
  for (var i = 0; i < props.length; i++) {
   var descriptor = props[i];
   descriptor.enumerable = descriptor.enumerable || false;
   descriptor.configurable = true;
   if ("value" in descriptor) descriptor.writable = true;
   Object.defineProperty(target, descriptor.key, descriptor);
  }
 }
 return function (Constructor, protoProps, staticProps) {
  if (protoProps) defineProperties(Constructor.prototype, protoProps);
  if (staticProps) defineProperties(Constructor, staticProps); return Constructor;
 };
}();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Sample = function () {
function Sample() {
_classCallCheck(this, Sample);
}
_createClass(Sample, null, [{
key: "length",
value: function length() {
return 100;
}
}]);
return Sample;
}();
0406デフォルトの名無しさん2016/09/09(金) 22:47:46.14ID:dcApvFQ/
>>404 >>405
ありがとうございます。
勉強になりました。
0407デフォルトの名無しさん2016/09/10(土) 11:41:02.99ID:bPnbAneW
わざわざインスタンス作るまでのことじゃない
という夢を見た
0408デフォルトの名無しさん2016/09/12(月) 00:16:46.01ID:MSYFEfr8
>>407

あ
0409デフォルトの名無しさん2016/09/14(水) 11:42:56.90ID:7fc5lKN8
<body onLoad="document.getElementById(id).style.display = 'none'">
でページを読み込んだとき表示させたくない部分を隠せるのだけど
ブラウザで何回もリロードしていると隠れている部分が一瞬表示されることがあります
これを防ぐ方法あったら教えてください
0410デフォルトの名無しさん2016/09/14(水) 11:55:36.48ID:T/00QwAr
>>409
どうしてonLoadにしているのかが分からない
最初からidの要素に対してやればいいのでは?
0411デフォルトの名無しさん2016/09/14(水) 21:09:29.93ID:jzervOJ/
>>409
表示に関することはCSSでやれ
0412デフォルトの名無しさん2016/09/15(木) 04:07:08.15ID:3ffkfw2U
>>409
そりゃonLoadで消す処理の前に描画処理が走ってしまうと表示されるだろうな
まずonLoad は画像等の外部リソースがすべて読み込まれるまで発火しないので、そういう場合どちらかと言えばDOMContentLoadedで呼ぶ方がいい

一瞬でも見せたくないならcssなど外部リソースへのリンクをすべて切った状態で表示されない状態であるべき
表示したい時にそのエレメントを作るまたは流し込む、あるいは非表示にしてあるものを必要に応じて表示にする方が好ましいと思う
0413デフォルトの名無しさん2016/09/15(木) 05:14:15.52ID:ql+kvaik
先にCSSで、非表示に設定しておいて、JSで表示すればいい
0414デフォルトの名無しさん2016/09/15(木) 05:20:33.69ID:ql+kvaik
正しいかどうかは知らないけど、

漏れは、<head>内で、CSSを読み込ませて、
<body>の終了直前で、JS, jQuery, jQueryUI を読み込ませている
0415デフォルトの名無しさん2016/09/15(木) 08:25:11.28ID:snQtI1Af
>>409
JS有効/無効関わらず、適用させるべきなら静的に外部CSSを適用する

JS有効時のみ適用させるなら
1. JSで動的に外部CSSを挿入する
2. JSで動的にstyle要素を挿入する
3. JSで動的にdocument.styleSheetsを操作する
0416デフォルトの名無しさん2016/09/15(木) 08:35:03.76ID:snQtI1Af
回答しておいてなんだが、これはES限定の質問ではないので下記スレで質問すべきだな

+ JavaScript の質問用スレッド vol.122 + [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1472426483/

そもそも、このスレがvol.121の後継スレと銘打って立てるから、こういう勘違いした質問者が出てくるんだよな
「ECMAScript デス 6」として立てれば良かったものを…
0417デフォルトの名無しさん2016/09/15(木) 16:12:55.70ID:3ffkfw2U
あっちは頭のおかしな子が常駐してるからなぁ

外部CSSでやった場合、その外部CSSを取得するためのhttpリクエストがコケたり読み込みが遅れた場合CSSが解釈される前に表示されてしまうよ
よって絶対に(一瞬たりとも)表示したくないならば外部CSSで隠すのではダメ

最低でもインラインCSSで静的に非表示にしておく事が最低条件で、可能ならそれを表示する必要が生じるまでDOM要素が存在しない状態にしておくべき
0418デフォルトの名無しさん2016/09/15(木) 18:33:18.76ID:tL4oMhKi
>>417
> 外部CSSでやった場合、その外部CSSを取得するためのhttpリクエストがコケたり読み込みが遅れた場合CSSが解釈される前に表示されてしまうよ
link要素は基本同期読み込みだったと思うがな これ以上は該当スレでやってくれ
変な奴はどこにでもいるからスルーすればいいだけ
0419デフォルトの名無しさん2016/09/16(金) 23:25:08.31ID:90O68WAb
JavaScript の Closure Compiler
https://googledevjp.blogspot.jp/2016/09/closure-compiler-in-javascript.html

> Closure Compiler は、2009 年に元は Java でリリースされました。本日は、
> まったく同じ Closure Compiler がピュア JavaScript で Java を使わずに利用できる
> ことになったことをお知らせします。この仕組みは NodeJS 環境で実行するように設計されており、
> いくつかのよく使われているビルドツールをサポートしています。

> 初めて聞く方のために説明すると、Closure Compiler は JavaScript の最適化、トランスパイル、
> タイプチェックを行うツールです。これを使うと、コードを高パフォーマンスでサイズが縮小された
> コードにコンパイルすることができます。

> let、const、アロー関数などの ES2015 の新機能をサポートしており、まだすべてではサポートされていない
> ES2015 メソッドの polyfill も提供しています。メンテナンス性や拡張性の高い優れたコードを書けるよう、
> Closure Compiler は構文チェック、タイプの使用法の訂正、さまざまな JavaScript における注意点についての警告も行ってくれます。

これは素晴らしい。Closure CompilerはGoogle製でブランド力はあるのだが、
Javaが必要だったのがJavaScriptの世界に馴染めなかったんだ。

ただbabelはその先を行っていて、拡張可能な仕組みでES2015だけじゃなく
JSX対応とかコード変換にまつわることをサポートするツールになってるんだが、
対抗馬に鳴るだろうか?
0420デフォルトの名無しさん2016/09/17(土) 08:30:02.95ID:0xe0k3r9
>>419
無駄な長文引用は止めてほしいものだな
BabelとClosure Compilerは用途が異なるので競合にはならない
0421デフォルトの名無しさん2016/09/17(土) 13:55:23.53ID:YjgX2ujU
'use strict';
"use strict";
のどちらでも良いですか?
上級者の人はどちらを使いますか?
0422 ◆SEdFBOkLSw 2016/09/17(土) 13:56:43.79ID:gYNx5cgj
その先を行ってる訳じゃないでしょ。
Javaが必要だった、と言うが、そんな事なんの問題でも無いと思う。
結局、どっちも、誰かの言う「良くないJavaScript」を「良いJavaScript」に変換するだけの存在。
0423デフォルトの名無しさん2016/09/17(土) 15:18:00.80ID:530UZtkB
>>421
シングルの方がシンプルなので好まれる
ただJSONを書くときとの整合性を考えるとダブルになる
0424デフォルトの名無しさん2016/09/17(土) 17:33:41.59ID:YjgX2ujU
>>423
JSONでシングルは使えないのですか?
0425デフォルトの名無しさん2016/09/17(土) 17:43:37.89ID:5r5hyKhZ
> ただJSONを書くときとの整合性を考えるとダブルになる

そんなどうでもいいところの整合性なんて考えなくていい。
JSONとの整合性を保つ意味がない。
0426デフォルトの名無しさん2016/09/18(日) 05:27:32.37ID:/bzuSpCV
俺はそういうとこを突き詰める人間のほうが好きだけどね。
プログラミングには少なからず美的要素が含まれるから。
少なくともそういうところを考えず放って来た者は上級者ではない。
0427デフォルトの名無しさん2016/09/18(日) 11:44:00.08ID:8zKQ5/pX
>>426
意味がわからん。

JavaScriptとJSONは似ているが別の言語と考えるべき。

言語に応じた最適な書き方を求めるべきであって、
別の言語の習慣を持ち込むなって話なんだけど?
0428デフォルトの名無しさん2016/09/18(日) 12:18:29.13ID:JCfSaSaV
>>426
Cobolみたいな表記が良いの?
0429デフォルトの名無しさん2016/09/18(日) 12:26:41.43ID:Wkbj4nCn
JSONはCSVやXMLと同じ一つのフォーマットに過ぎない
0430デフォルトの名無しさん2016/09/18(日) 15:20:31.34ID:0+yFEvXA
JSONがJavaScript Object Notationであることを勘案すると>>423は以下の様に翻訳できる

>ただJSONを書くときとの整合性を考えるとダブルになる
ただオブジェクト宣言時の表記との整合性を考えるとダブルになる

正直どうでもいいな
0431デフォルトの名無しさん2016/09/18(日) 15:36:58.44ID:7fymcmTA
整合性ではなく、統一性なんだがw
0432デフォルトの名無しさん2016/09/18(日) 15:45:54.06ID:8zKQ5/pX
統一する理由がない
0433デフォルトの名無しさん2016/09/18(日) 16:59:06.74ID:/bzuSpCV
統一する理由がない。
つまりそれはどっちでもいいと言うことだろう?
逆にどっちが良いかの理由を探すのならそういうことも理由になり得るということだ。
君がそういうことを理由としないというのは結構だが、
理由とする人がいることは認めないといけない
0434デフォルトの名無しさん2016/09/18(日) 17:17:43.50ID:8zKQ5/pX
>>433
統一する理由がないと言ったのは、JavaScriptと
JSONのクォートの使い方を統一する必要が無いという意味ね。
JavaScriptはJSONじゃないんだから。

だからJSONを持ち出してきた事自体をなかったことにしろということ。
どちらにするかは採用するコーディング規約に従えばいいだけ。
0435デフォルトの名無しさん2016/09/18(日) 17:27:13.31ID:xD5NzQXy
>>433
それは理由になっている場合の理屈
君のそれが「正当な理由になってない」という事では?
0436デフォルトの名無しさん2016/09/18(日) 17:41:30.85ID:xD5NzQXy
JSONとJavaScriptでは言語体系が違うからなあ
JSONはJavaScriptの文法を真似ているだけのファイルフォーマットだからね
JSONとJavaScriptのクォートを統一するのはPHPとJavaScriptのクォートを統一するようなもの
0437デフォルトの名無しさん2016/09/18(日) 17:45:59.39ID:xD5NzQXy
現実的な理由としてHTMLタグをJavaScriptコードに埋め込む場合、文字列リテラルでダブルクォートを使っているとHTML要素の属性を括る文字にシングルクォートを使わないとエスケープが面倒くさいというのがある
HTML文書でシングルクォートを使っているなら統一性が生まれるけど、ダブルクォートを使っているならJSでは逆にシングルクォートを使った方が統一感があっていい
あまりないけど、サーバサイドスクリプトを介在してJSONをJavaScriptコードに埋め込む場合もシングルクォートを使っていた方が都合がよい
0438デフォルトの名無しさん2016/09/18(日) 18:18:08.32ID:7fymcmTA
a = "123';
b = '456";
 前後のクォートが異なる ※整合性
a = "123";
b = '456';
 a b のクォートが異なる※統一性

JavaScriptに対しての統一性だと言ったんだよ
整合性が保たれていないと動作しないだろw
0439デフォルトの名無しさん2016/09/18(日) 18:58:00.12ID:/bzuSpCV
>>435
まず、どっちで書いても機能的には変わらないということが大前提にあるよね
そうしたらもう気分とかそういう人間側の都合になってくるわけよ

例えばHTMLではダブルが使われる事が多いので、
実際に埋め込むことは滅多にないだろうし、今はテンプレートリテラルもあるけれど、
気分的にJSではシングルを使うとかね

逆にそういう事が理由でないという人が今どちらかを使っている理由を聞きたい
その日のサイコロで決めてるというのでなければ理由があるはずだ
例えば本に書いてあったとか、最初に習ったのがこっちだったとかね

自分はそういう理由も理由だと思うけれど、
まだ大前提のうちでは理屈として一般的で、まだマシに意味がある想像を述べることを推してるのよ
0440デフォルトの名無しさん2016/09/18(日) 22:55:44.47ID:8zKQ5/pX
>>437
> あまりないけど、サーバサイドスクリプトを介在してJSONをJavaScriptコードに埋め込む場合もシングルクォートを使っていた方が都合がよ
そんなことしてるならコードを見直したほうが良いよ。
普通はJavaScriptオブジェクトをJSONに変換する。
0441デフォルトの名無しさん2016/09/18(日) 23:18:12.13ID:8mgjQq3k
>>439
あなたのいう「認める」とは何?
端から見ればあなたがJSONとの統一性を気にしない人を「認めていない」のだが
0442デフォルトの名無しさん2016/09/19(月) 05:07:37.39ID:io387Cln
すみません、よそ者ですが、
そもそもなぜ '' や "" で囲う必要があるのですか?

use strict;

ではダメな理由を教えていただけますでしょうか?
0443デフォルトの名無しさん2016/09/19(月) 05:42:42.21ID:Rfn/Judi
>>442
use strictに対応してないブラウザでエラーが出るからだよ。
文字列にしておけば、古いブラウザでも単なる文字列があるだけ。
0444デフォルトの名無しさん2016/09/19(月) 11:33:59.10ID:io387Cln
>>443
ありがとうございました。
長年の疑問が解消しました。
0445デフォルトの名無しさん2016/09/20(火) 00:04:22.78ID:DlF8DRLC
Angular2で出来て、Vue.jsで出来ないことはどのような事がありますか?
また逆はありますか?
0446デフォルトの名無しさん2016/09/20(火) 15:54:14.06ID:GpfqQSu0
頭が相当悪いみたいだね?
一行目そのまま検索しろよw
0447デフォルトの名無しさん2016/09/21(水) 14:44:20.17ID:wW2qFR9f
すまん、言い過ぎた
反省してる
0448デフォルトの名無しさん2016/09/22(木) 17:06:35.53ID:zXBENXMk
誰かflow使ってる人いる?
0449デフォルトの名無しさん2016/09/23(金) 12:16:27.04ID:QcEXcfJB
統一する必要は無いけど、覚える量を減らしたいので統一しているよ。
0450デフォルトの名無しさん2016/09/23(金) 13:55:08.58ID:AF/DJJLc
>>449
何の話?
0451デフォルトの名無しさん2016/09/23(金) 22:25:12.59ID:MCHe7LJO
>>449
RubyとJSONで "" と '' のどっちを使うかという話だろう?
0452デフォルトの名無しさん2016/09/23(金) 23:00:49.95ID:MCHe7LJO
正直JSONを手書きするのはやめたほうが良いよ。

ライブラリを使って(各言語の)オブジェクトとJSONの
相互変換をした方がいい。だからJSONが""でくくられてる
なんか忘れるべき。

ただテキストエディタのatomとかの設定ファイルや
package.jsonとかがJSONだったりするんだよな。

手書きは全部YAMLにすればいいのに。
0453デフォルトの名無しさん2016/09/23(金) 23:18:21.05ID:oC1wKf1S
>>451
JSONは"しか使えないから選択肢はないだろうに

>>452
> 正直JSONを手書きするのはやめたほうが良いよ。
同意、JSならJSON.stringifyで十分だな
0454デフォルトの名無しさん2016/09/23(金) 23:27:17.39ID:Da0YgZYz
元々はjavascriptをシリアライズする為の物だったんだよね?
手書きする事はあまり考えられてなかったんじゃねーの
0455デフォルトの名無しさん2016/09/23(金) 23:30:53.64ID:laz5P8lZ
設定ファイルをjsonで書くの多いだろ
jsonに変換するツール書くかのか? w
0456デフォルトの名無しさん2016/09/23(金) 23:35:07.87ID:aAYGOufH
ツールなんか使わなくともシリアライズする機能が各言語で用意されてるからな
0457デフォルトの名無しさん2016/09/23(金) 23:46:44.92ID:laz5P8lZ
はあ?
じゃ【設定】はどこに書くんだよ w
0458デフォルトの名無しさん2016/09/23(金) 23:51:52.39ID:2jAc0sAD
JSON.stringify({a:1, b:2}); とか、普通にやるだろ
JSONを全部手書きしたらプロパティ名をクォートで括らなければならんし、面倒くさい
簡単なJSONの書き換えなら手入力するかもしれんが
0459デフォルトの名無しさん2016/09/24(土) 00:04:59.40ID:y4/Y2YH6
お前、設定項目が数個のプログラムしか作った事ないのか? w
そんでもってa:1をa:2に書き換えたら、その都度そのプログラム実行するのか? 大爆笑
0460デフォルトの名無しさん2016/09/24(土) 00:11:43.60ID:8/0tEXHb
>>459
おまえは読解力が足りないアホなのか
数個だろうが何個あろうが、複数あるからシリアライズする価値がある
簡単な書き換えなら手入力するといってるだろ
0461デフォルトの名無しさん2016/09/24(土) 00:18:30.72ID:y4/Y2YH6
お前はアホなのか?情報は一元管理が鉄則

これに反すると
"a":1を"a":2に書き換えてa:1をa:2に書き換えるハメになる
バカしかやらんわ
0462デフォルトの名無しさん2016/09/24(土) 02:14:00.16ID:bcRI8Hfy
>>459
プログラムを実行も何も、ワンライナーじゃえの
var j=JSON.parse(fs.readFileSync(...));j.hoge=aaa;fs.writeFileSync(JSON.stringify..
0463デフォルトの名無しさん2016/09/24(土) 06:05:18.86ID:54HKSWWZ
promptでダイアログボックスを表示して、キャンセルを押すとNaNが返ってきます。
ダイアログボックスのキャンセルはNullが返ってくるとあったのですが、何がいけないのでしょうか?
見入力でOKを押した場合と、キャンセルを押した場合とで違う処理をしたいと思っています。
0464デフォルトの名無しさん2016/09/24(土) 08:35:07.11ID:8/0tEXHb
>>461
>>462藻指摘してるが、JSON.parseしてからJSON.stringifyするだけだろ
2箇所を同時に書き換えなければならない、なんて思ってるのはお前だけ
0465デフォルトの名無しさん2016/09/24(土) 09:16:15.32ID:y4/Y2YH6
>>464
後出し大将現る
> JSON.stringify({a:1, b:2}); とか
0466デフォルトの名無しさん2016/09/24(土) 10:00:58.09ID:T2jfomp1
>>463
知らんけどブラウザ依存じゃない?
ttps://jsbin.com/tamofawite/edit?js,output
Chromeだと false だった
0467デフォルトの名無しさん2016/09/24(土) 12:47:39.74ID:NUokNM1t
>>465
元々はJSONを入力する時の話だったからJSON.stringifyを紹介した
お前さんが「JSONとオブジェクト初期化子の2箇所を同時に書き換えるのか」とアホな事をいってJSON読み込みの必要が出てきたからJSON.parseを紹介した
お前さんが何の設定する事を想定していてどのように編集しているのか、俺は知らん
俺から見れば情報を曖昧に出して後出ししたのはお前の方
0468デフォルトの名無しさん2016/09/24(土) 12:51:25.63ID:NUokNM1t
後な
JSONの設定編集は当初の>>421の質問からは大きく話題がずれてる
JSONの設定に合わせてJavaScriptコードの入力スタイルを決める必然性はまるでない
君はそうなんだろうが、別の言語同士でクォートの記述を合わせる必要はないからな

GoogleのJavaScript Style Guideに合わせてシングルクォートを使う人もいるだろう
見た目を気にしてシングルクォートを使う人もいるだろう
HTMLで見慣れているダブルクォートを使う人がいるかもしれない
最終的には自分なりの好みや優先順位で決まるもので他人の考えを否定出来るほどの論理は基本的にない
■ このスレッドは過去ログ倉庫に格納されています