+ JavaScript の質問用スレッド vol.140 +
レス数が1000を超えています。これ以上書き込みはできません。
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください
■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」から解離した議論はよそでやること。
■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
1レスに収まらないならコード投稿サイトを利用してください。
http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/
■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
■前スレ
+ JavaScript の質問用スレッド vol.139 +
https://mevius.5ch.net/test/read.cgi/hp/1555750241/ >>131 の発言の意味が良く分からないのですが、どういうことでしょうか。
fieldset 要素は flow content 要素を入れられる模様
https://www.w3.org/TR/html5/sec-forms.html#the-fieldset-element
> Content model:
> Optionally a legend element, followed by flow content.
div 要素も section 要素も、flow content に含まれる模様
https://www.w3.org/TR/html5/dom.html#flow-content-2
この2点を前提とすると、何がどう問題なのか分からなくなってしまいまして。 よりその状況向けの要素があるからそっちを使えってことじゃないの
まあ別に好きにやればいいと思うけど >>131は「個人の感想」だろ
なんでこの質問者は荒らしに構うのかね なにいってるのか分からんが、>>160が荒らしといいたいのか ようは一切レスをするなってこと。
荒らしに構うなということ自体が、荒らしにレスしてることになる その論理だと、>>162-166が全員荒らしなわけだが
>>162-163は同じ主張してるのに、なんて争そうのかね なんで荒らしに構うと荒らしになるんだ?
荒らしに構うなって言ってるだけだろ
正確には荒らしと思うやつにレスするな。
反論もするな。黙って受け入れろってことだが >>168
なぜ>>160に構うことが荒らしになるんだ? >>169
誰が「>>160に構うことが荒らしになる」と
言ってるのか、まずそれを言おうか? >>172
荒らしに構うなって書いてあるだけだよね?
どこに荒らしに構うと、荒らしになるって書いてあるの?
なにか弁明することあるかい?w >>174
お前、それ荒らしだぞ
もう書き込み禁止ね >>174
>>160に構ってはいても、荒らしに構ってないから、その指摘は不適当 >>175
確かに>>174は荒らしだな
すまんかった まじめに読んでしまったのが間違いだったのかなあ
>>131 は上から目線で発言してるだけで、内容を読んだらブーメランだった、と
かつての位置付けは存じませんが、fieldset の現在の位置付けからしたら、完全に誤った内容だった、と
そりゃ確かに section 要素や div 要素は、避けるべきものであったり最終手段とすべきものであって
今回のケースでは span あたりの方が適切だったのかも知れませんが
https://www.w3.org/TR/html5/sections.html
https://www.w3.org/TR/html5/grouping-content.html#elementdef-div
https://www.w3.org/TR/html5/textlevel-semantics.html#the-span-element
…まだ確信が持てて無いので「ココ違うよボケカス」的なもので良いので指摘ねがいます… OS:Win Vista,ブラウザ:IE8使用(IE9はセキュリティが厳しいのでダウングレードしています。)
JSでテキスト(data1.txt)の中身を読み込んで、ブラウザでalert()出力したく思って
いますが何も表示されないので困っています。
テスト段階なのでdata1.txtは1行のみの極単純なものです。
(テキストの中身: 西暦,為替[円/$],名目GDP[兆円],間接税率[%],税収[兆円])
<書いた内容> ※すいません全部書きます。
function readFile(name) {
iomode = 1;
format = 0;//ASCIIフォーマットで読み込む
// ファイルシステムオブジェクト
myobject = new ActiveXObject("Scripting.FileSystemObject");
// OpenTextFile()でファイルを開く
file = myobject.OpenTextFile(name, iomode, true, format);
data = "";
// eofが来るまで 1行ごとに読む
while (!file.AtEndOfStream) {
// ReadLine() で1行読む
data += file.ReadLine()+"\n";
}
// ファイルを閉じる
file.Close();
// データを返す
return data;
}
window.alert(readFile("data1.txt")+" です");
すいませんが問題点をご指摘願います。 >>179
たかがHTMLに避けるべきものも最終手段もクソもないよ
著しく非常識でないのなら好き勝手に書けばいい sage を外し忘れてたもんで
一連のQ&Aでの発言まとめときます
おかしなこと言ってる可能性たかいかも
>>75
>>76
>>78 (バージョン古くても平気な御人は無視すべきだったかも)
>>92
>>93
>>95
あたりです
レスアンカー多いと怒られたので途中まで >>180
15年くらい時間が巻き戻った気分!
急IEのJavaScriptはほぼJScriptのラッパーで
JScriptも半分くらいはActiveXのラッパーだから
そう言うこともあるもんだ
同期・非同期が問われるようなことするときは特に 荒らしに構うなっていう書き込み自体は、荒らしに対するレスでは無いから、荒らしにならない!
正常な人に対する忠告だから
一方、荒らしに反応して書き込みを続ける者は、荒らし!
荒らしはレスが欲しい。レス乞食
荒らしは無視されるのが大嫌いだから、無視すべし! file = myobject.OpenTextFile(name, iomode, true, format);
ここで、10秒ぐらい、sleep すれば?
読み込むまで、確実に待つ
while (!file.AtEndOfStream) { >>184
だからそういう書き込みは、このスレの内容と
何の関係もねーだろ。関係ない話すんな >>184が人気すぎて、jQuery厨の俺も嫉妬(笑) >>180
相対パスはデスクトップ基準になるので絶対パスで指定する var str = "2x*(sqrt(-3/7+5))"
みたいな文字列があったときに、sqrtの後に続くカッコ内の"-3/7+5"だけ取り出そうと思ったら
どんな処理をするのがスマートですか? >>191
ちょっと質問が説明不足だったので補足すると
以下のように、ランダムな文字列があって
var str1 = "2*x*(sqrt(-3/7+5))"
var str2 = "4*x/3*(3*sqrt(-1/3+4*x))^2"
var str3 = "(4*x+2)^3/3*(3*sqrt(-1/2+2*x^2))^4"
sqrtの後に続くカッコ内の文字
str1であれば、-3/7+5
str2であれば、-1/3+4*x
str3であれば、-1/2+2*x^2
をそれぞれ取り出したい、といった場合、どういう処理をするのが良いですか? 正規表現で抜き出す
str.match(/sqrt\((.+?)\)/)[1] str.replace(/.*sqrt\((.*?)\).*/, '$1') そんな特定の場合にしか使えない処理が
何の役に立つっていうんだろう? jQスレにも貼ったがこちらにも貼っておく
jQueryの脆弱性が発覚した
https://portswigger.net/blog/abusing-jquery-for-css-powered-timing-attacks
jQuery独自のセレクタを巧みに使うことでタイミングアタックで情報が抜かれてしまう
直接使っている部分で絶対にセレクタに想定外の文字列が入ることがなくとも
プラグインやjQを利用するライブラリでどうなっているのか分からない
とりあえず当分は使われている全てのjQuery、もしくは全てのスクリプトの全ての関数定義
function〜(){〜を一括置換処理して
一行目にif((''+arguments[0]).length>30)throw 'Err'
などと入れることを勧める >>200
ここはライブラリのスレでも無いし…
vanilla js 自体の穴じゃないし… 荒らしは相手にするな!
ソースコードを書かない奴は、荒らしだから無視しろ!
プログラマー以外とは、話をしないように!
荒らしは、30分毎に書き込むから、要注意! JavaScript初心者です。
classBのオブジェクトからmethodAを呼び出したいんですが
methodAがないというエラーが出ます。
--------------------------------------------
function classA () {
}
classA.prototype = {
methodA: function() {
console.log('classA methodA');
},
methodB: function() {
console.log('classA methodB');
}
};
function classB () {
}
classB.prototype = new classA();
classB.prototype = {
methodB: function() {
console.log('classB methodB');
}
};
--------------------------------------------
継承先のクラスで特定のメソッドだけオーバーライドしたい場合は
classB.prototype.methodB = function() {
console.log('classB methodB');
};
のように個別に書いていくしかないんでしょうか。 はい
IE対応しなくていいならclass構文使えばよろし とりあえず >>205 を参考に以下の書き方をしたら
思ったとおりの動作にはなったっぽいです。
--------------------------------------------
function classB () {
}
classB.prototype = Object.create(classA.prototype, {
methodB: { value function() {
console.log('classB methodB');
}}
});
--------------------------------------------
Chromeで動かす前提ならやっぱりclass構文使うほうがいいんですかね Object.assign()使えるけど
圧倒的にclass構文で行くべき
https://jsfiddle.net/pL65gw4k/ まだIE30%ぐらいいるのかなとおもったら
もう10%切ってるのね
まー国内に限定すればもっといそうだけど なんか最近
過去からタイムリープしてきてる人がいるな… すいません、質問になるのか分からないのですが
もしよろしければご教授ください。
ある案件でjqueryのライブラリをいくつか使った
数ページのちょっとしたサイトを納品しました。
納品先はクライアントではなく、
クライアントのサーバを管理する別の制作会社です。
で先日そこから突然サーバOSやインストールした
プログラム一覧が送られてきて「jqueryのバージョンもご確認ください」
とか意味不明なことを言ってきたのですが
(実際そこが作業したものの一覧ではなく
ホスティング業者が用意したfedora標準のリスト)
そこの会社の担当者は超絶馬鹿ってことで宜しいでしょうか。。
OSとミドルウェアとフロントエンドの区別も付かんとは。。
しかも自分のとこがjsの何を入れたかも分からんという。。。 >>213
ここはJavaScriptの質問用スレッド nodeのグローバルにjQueryがインストールされている可能性が微レ存 画像のスクロールに合わせてセレクトボックスを変更するにはどうすればいいでしょうか?
<img src="1.jpg" alt="">
<img src="2.jpg" alt="">
<img src="3.jpg" alt="">
<select style="left:0;top:0;position:fixed"></select>
<script>
for (var i=0, len=document.images.length; i < len; i++) {
option = document.createElement('option');
option.value = i;
option.text = i;
document.getElementsByTagName('select')[0].appendChild(option);
}
const observer = new IntersectionObserver((entries) => {
if (entries.isIntersecting) {
option.selected = true;
} else {
option.selected = false;
}
});
const img = document.querySelectorAll('img');
img.forEach(img=>{observer.observe(img)})
</script> >>218
entriesは配列
const selectbox = document.querySelector('select');
for (let i=0, len=document.images.length; i < len; i++) {
const option = document.createElement('option');
option.value = i;
option.text = i;
selectbox.appendChild(option);
document.images[i].dataset.value = i;
}
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting) {
selectbox.value = entry.target.dataset.value;
}
});
});
const img = document.querySelectorAll('img');
img.forEach(img => observer.observe(img)); 無駄を削ぎ落とした
const observer = new IntersectionObserver(entries => {
const entry = entries.reverse().find(entry => entry.isIntersecting);
if (entry) {
$('select').val(entry.target.dataset.value);
}
});
$('img').each(function(i) {
$('select').append($('<option>', {value: i, text: i}));
this.dataset.value = i;
observer.observe(this);
}); Java scriptの心得がほとんど無い為、情報不足の折はご容赦ください。
マスターテーブルA,入力テーブルBと2つのテーブルがあり、Bテーブルの「分類A」を入力すると
Aテーブルの分類B、分類Cより
Bテーブルの分類D、分類Eへ値を返したい時、下記のスクリプトを
一部編集して使用するようなのですが、どこに各値の編集をすれば
よろしいでしょうか。
ご教示頂ければ幸いです。よろしくお願いいたします。
$p.events.on_editor_load = function () {
//Bテーブルの「分類A」の値が変更されるたびに呼び出されるイベント
$(document).on('change', '#Results_ClassA', function () {
//Bテーブルの「分類A」に値がセットされている場合のみ、Aテーブルの指定したレコードの値を取得する
if ($('#Results_ClassA').val()) {
$p.apiGet({
//Bテーブルの「分類A」の値(レコードID)を指定
'id': $('#Results_ClassA').val(),
'done': function (0) {
//Bテーブルの項目にAテーブルから取得した項目の値をセット
$p.set($('#Results_ClassB'), data.Response.Data[0].ClassB);
$p.set($('#Results_ClassC'), data.Response.Data[0].ClassC);
},
'fail': function (data) {
console.log(data);
}
});
} else {
//Bテーブルの「分類A」に値がセットされていない場合、Bテーブルの項目に空文字をセット
$p.set($('#Results_ClassA'), '');
$p.set($('#Results_ClassA'), '');
}
});
} スレタイ見て自分の書き込み見てなんにも思わないようなら
情報不足の前に質問者としての心構えが不足している
もしも気づけたら知恵遅れの方も訂正入れとけよ 'done': function (0) {
//Bテーブルの項目にAテーブルから取得した項目の値をセット
$p.set($('#Results_ClassB'), data.Response.Data[0].ClassB);
$p.set($('#Results_ClassC'), data.Response.Data[0].ClassC);
},
done 内で、data という変数を使うなら、引数に、data を渡さないといけないのでは?
>'done': function (0) {
'done': function (data) {
Aテーブルの分類B、分類Cを、Bテーブルの分類D、分類Eへ設定するなら、
data.Response.Data[0].ClassB, data.Response.Data[0].ClassC を、
Bテーブルの分類D、分類Eへ設定すればよい
ここは、JavaScript のスレなので、
jQuery の質問は、下のスレへ移動してください!
+ JavaScript & jQuery 質問用スレッド vol.7 + [無断転載禁止]c2ch.net
https://mevius.5ch.net/test/read.cgi/hp/1478002550/l50 >>227
jQueryにsetなんてメソッドはありません。
jQueryじゃないのならこのスレですね 【速報】金券五百円分とすかいらーく優侍券をすぐもらえる
https://pbs.twimg.com/media/D8I_rBwU0AIZUL2.jpg
@ スマホでたいむばんくを入手
A 会員登録を済ませる
B マイページへ移動する
C 招待コード→招待コードを入力する [Rirz Tu](スペース抜き)
今なら更に4日18時までの登録で2倍の600円の紹介金を入手
クオカードとすかいらーく優待券を両方ゲットできます。
数分で出来ますのでお試し下さい >>229
一万円の請求来たんだけどどういうこと?? >>229
警察に相談する
事件に巻き込まれた場合は、警察に相談することが鉄則です。しかし、本当に詐欺にあったのかわからないため、警察に相談しづらいケースもあります。警察への相談に関して、パターン別に通報先をご紹介します。
相談窓口
詐欺かどうかわからないが何となく怪しさを感じている場合は、「#9110」の相談窓口に連絡しましょう。その地域を管轄する警察の相談窓口に繋がります。
必要に応じて、関係機関の紹介や、解決に向けてアドバイスしてもらえます。緊急を要する事件や事故は110ですが、緊急性のないものは#9110にかけましょう。むやみに110にかけると、他の緊急性のある事件や事故への対応が遅れる恐れがあります。
電話番号:#9110
受付時間:月曜〜金曜8:30〜17:15
休業日:土日祝(当直または音声案内) >>229
国民生活センターに相談する
国民生活センターは各地域にある消費生活センターのことで、詐欺被害にあった場合には、今後とるべき行動や再び被害にあわないための対策などをアドバイスしてもらえます。
また、業者と和解できるようあっせんしたり、解決に向けて協力するよう業者に伝えたりも可能です。警察に被害届を受理してもらえなかったり、他の関係機関に相談しても解決に至らなかったりする場合に相談しましょう。
電話番号:188(いやや)
受付時間:地域で異なる
休業日:地域で異なる(年中無休、年末年始を除く窓口が多い) >>228
えええ…
上の質問に答えるつもりはないけど
setは$pのメソッドだろ だから$pの使い方を知りたいなら、(jQueryではなく)
$pのクラスのマニュアルを見れと言ってる
jQueryの話じゃないんだからjQueryスレに誘導されても困る 質問者も$pが何のライブラリから来てるか分かってなさそうだけどな Javascriptでの画面サイズの取得には、
window.innerWidthやscreen.widthとか複数の手段がありますが、
iPhoneXのような変態ディスプレイで取得できる値も
他のスマホと同様に実際の領域との認識で良いのでしょうか? $(document).on('change', '#Results_ClassA', function () {
'done': function (0) {
'fail': function (data) {
これは、jQuery じゃないの?
>'done': function (0) {
'done': function (data) {
引数を、data にしないといけないのでは? on changeにdoneとかfailとかないから明らかに違う vanilla js で $ マーク使う場面ってどんなん undefined が変数名としても使えるようなもんか(絶対違 >>239
実際の領域を取得する方法は多岐にわたる 初歩的な質問かもしれませんが…
外部化したJSを、別のJSでdocument writeで出力した場合、元の内容は正しく記述されるのでしょうか?
入れ子構造のような形でJSを出力できるのかな、みたいな document.write は、使うな!
一旦、そのページのすべての要素が削除されてしまうから!
つまり、上書きされる ナウなヤングはdocument.writelnだよな! 呼び出し元
<script type="module" src="main.js">
main.js
import {name} from './module.js';
console.log(name);
module.js
export const name = "Taro";
こんな感じで動くっぽい @ Firefox 67.0.1
参照: https://analogic.jp/module-summary/ んで
main.js
import {hikizan} from './hikizan.js';
console.log(hikizan(10,1));
hikizan.js
import {tasizan} from './tasizan.js';
export const hikizan = function(a,b){
return tasizan(a,-b)
}
tasizan.js
export const tasizan = function(a,b){
return a+b;
};
これで多分動く…とおもう Parcel とか WebPack とか CommonJS とか AMD とか良く分からん…
$.getScript も良く分からん… 基本的には、VSCode, Node.js を使えばよい
Node.js は、Ruby のライブラリを置き換えたもので、CommonJS 方式(require)で読み込む。
ただし、Node.jsのrequireは同期処理で、CommonJSは非同期処理。
AMD 方式は、最近では聞かない
WebPack, browserify は、モジュールバンドラー。
Babel は、ES6(ES2015)をES5 に変換する。
Gulp, npm-scripts は、タスクランナー Node.js は、Ruby のライブラリを置き換えたもので function a(){
return false
}
if (a){alert("true")} else {alert("false")}
これはfalseが表示されると思っているのですがなぜかtrueです。
また
function a(){
return false
}
alert(a)
これは関数の文字列?
「function a(){
return false
}」
が表示されてしまいます。期待しているのはfalseが表示される事です。なぜfalseが表示されないのでしょうか? 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b) >>265
console.log(typeof a); すみません仕事で javascript は使ってません
>>258 を書いたのは「javascript モジュール」で検索すると過去の経緯とか現状とか出て来るので
「たぶん実務では babel か何かを通してから使うんだろうなあ」と思いつつ、です
検索の過程で出て来たソフトウェアの名前を列記したので
性質の違うものが並んでいる・並んでいる可能性があるのは認識しつつ、でした
「実務に詳しい人が補足してくれるだろう」と思ったのでした >>269
>>259が少し変な人だっただけで質問は別におかしくないよ
わかんなくて、とりあえず自分で調べたなりに聞いてんだから
んで、今JSは超大雑把に
ブラウザの中でウェブの一部として動くものと、そうでないものがあって
コードのモジュール化についてはそのどちらなのかによって対処は変わるよ
って話 >>269
いいや、今では実務でも直接モジュールつかうよ
まともなところならもうトランスパイラなんかは使ってない
考えてみたら分かる
いくらモジュールや構文をレガシーブラウザで動かせてもAPIに差がありすぎるので
1つのスクリプトで賄うのは無理があるということ
だからあえてmoduleにしてモダンブラウザ用のコードをメインとして提供して
nomoduleを使ってレガシーブラウザ用の本当に最低限な機能をちょこっと書く
これが一番効率がいい × まともなところならもうトランスパイラなんかは使ってない
○ トランスパイラ使ってない所=まとも。うちは使ってない、だからまとも。はい論破! 最近は「自決」とだけ書いて
質問を投げ捨てるの流行ってるのかなあ function a(){ return false }
if (a)
a は、関数を呼び出していない。
関数そのもの
a( ) は、関数を呼び出す。
( )は、関数呼び出し演算子 あー!
自分で解決しました、で自決って書いてたのか
自殺したって書くのが若い子の間で流行ってるのかと思ってた(´∀`) よくdocument.writeは使うな!って言われるけど、何がしかのhtmlを出力したい時って代わりに何を使えばいいの?
windiw.onloadでページを全部読み込んだ後に処理されるようにしても、やっぱり使っちゃダメなの? >>289
<p id="foo">
とか html 側で書いておいて getElementByID して textContent を変更
どうしてもタグ入れたいなら innerHTML を使う
あるいは createChild するとか
p要素でもdiv要素でもspan要素でも何でも良いんだが、コンテンツやコンテキストによるかな $('#p').text(テキスト);
$('#p').html(HTML);
かんたーんかんたーん。 >>293
error
TypeError: Failed to execute 'insertBefore' on 'Node': 2 arguments required, but only 1 present.
あと、dとd1はconstでいいだろ スライドトグルとかは生のJavaScriptで書くのは難しいからジェイクエリーを使った方がよいですよね? 別に難しくはないから使わんな
ああいうのは今時はメインはCSSの処理で、JSはクラスの追加/削除くらいしかしないし クラスの追加/削除程度なら使っても遅くならんし
簡潔にかけるjQueryの方が良くね? ヤフーニュースのランキングで、
https://news.yahoo.co.jp/ranking
<a>要素を、クリックする前には、href が、
「https://headlines.yahoo.co.jp/何々」なのに、
クリックした後には、
「https://rdsig.yahoo.co.jp/何々」に変えてしまうのは、なぜでしょうか?
ただし、rdsig をクリックしても、headlines の方に移動するので、どういう意味があるのでしょうか?
クリック前
<a onmousedown="this.href='https://rdsig.yahoo.co.jp/何々'"
href="https://headlines.yahoo.co.jp/何々"></a>
クリック後
<a onmousedown="this.href='https://rdsig.yahoo.co.jp/何々'"
href="https://rdsig.yahoo.co.jp/何々"></a> 13×8が難しいからとわざわざ電卓借りてきて使うのか?
俺は最初から手元にあっても使わない >>295
Bootstrap には、無いの?
Bootstrapは、jQuery で作られているから、各部品を自分で作らなくてもよい bootstrapはついに5からjquery抜くんだとw
おせーよww 5ではjquery抜きのついでにIE11サポートもやめるんだろ?
つまり(日本では)仕事では使えない、役立たずFWってことだな 使いたい層が一定以上見込めるなら、しかるべきベンダが保守するだろ
ライセンス上は、保守によるパッチを公開する義務ないだろ
GPL じゃないんだし 人に基本的なとこ説明する必要があって、各種プリミティブ型は箱モデル、オブジェクト(配列含む)はラベルモデルで説明しようと思ったんだけど、個人的に文字列について基礎的なとこ分かってないことが明らかになったのでちょっと教えて下さい。
1)文字列を数値や真偽値と同様箱モデルで捉えることに問題はないですか?
2)let a = '文字列', b = '文字列';であるとき、
a === bの結果は当然trueですが、aの指す'文字列'とbの指す'文字列'はメモリ上同一オブジェクトですか?つまり実態はアドレスを比較しているだけ?
そしてそれはesの仕様で決まっているのですか?それとも実装に任されているのですか?
よろしくお願いします。 >>305に追加で以下もお願いします
3)
let str = 'abc';
str[1] = 'B';
console.log(str);
//=> abc(aBcではなく)
となる説明、あるいは参考サイト(MDNレベルの噛み砕いてある説明なら理解できますが仕様書を紹介いただいても私には敷居が高いです…) Ruby では、同じ内容(等価)の文字列でも、異なるオブジェクトID(同一ではない) になる
a = '文字列'; b = '文字列'
p a.object_id, b.object_id
#=> [15684800, 15684760]
一方、Python のsys.intern() は、内容が同じ「等価」な文字列に対して、
実行環境上で「同一」の文字列を返す。
返された文字列どうしは、==(等価)ではなく、is(同一)でも一致する 文字列は、数値型と同じで、オブジェクトじゃなくて、primitive。
参照を持っていないので、代入しても、参照ではなく、値が代入される。
書き込みできないオブジェクト
str[ 1 ] で、参照はできるけど、代入はできない
str = 'abc';
console.log( str[ 1 ] ); // b うーむ。
let s = "abc";
console.log(s);
s[1] = "B";
console.log(s);
let t = s[0] + "b" + s[2];
console.log(t);
t[1] = "B";
console.log(t);
文字列を作ると、メモリの中に「変更できない文字列」が作られます。
文字列の変数は、実際には、その文字列を参照するだけのものです。
なので、文字列を「変更」したいときには、必ず、「新しい文字列」を作る必要があります。
…とか… >>307
> 一方、Python のsys.intern() は、内容が同じ「等価」な文字列に対して、
> 実行環境上で「同一」の文字列を返す。
> 返された文字列どうしは、==(等価)ではなく、is(同一)でも一致する
https://ja.wikipedia.org/wiki/Flyweight_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
これですね ESでは値は原則消されることも無ければ複製されることもない
新しい値ができることと、
それに新しい名前が付けられ共有されることの繰り返しで成り立っている
ただし他の多くのメジャーな言語とは違い実装と事と仕様は原則綺麗に分離されている
実装では例えば原則参照の値渡し
ただしアドレス値に埋め込めるSMIはそのまま使うなどの
多くの人間的な工夫をした上で、
更に機械的な最適化段階を通すので
ロジック的な意味合いを考えるのは無益 >>314
長文なので抽象的すぎて
何のことを書いてるか分からん
サンプルコードで示して貰えまいか
>>310 のように 禁止されたのでレス分ける
>>314
>>311 で不充分と考えているのだとしたら
サンプルコードを示しつつ具体的に書いてもらえまいか
質問者の前提も、お忘れなく >>305-306からのレスはないようだから、もう見てないのだろう
回答する必要はない >>311
えぇ…
文字列どころかプリミティブ値全部イミュータブルなのね、衝撃だわ…
Cと全然違うんだね。
じゃJavaScriptでは変数を箱モデルで説明すんのは厳密には間違いなんだね。
これからはラベルモデルで説明するわ。
mdnにこんなページあったのか… ワッチョイ出てない質問者は自演で回答に文句いいそうで怖い
「もういない」と指摘された途端に出てくるのもね… >>318
> mdnにこんなページあったのか
1次情報で裏取るのが一番ですね
日本語の JS の情報ページは古すぎたり、あやふやだったり…
英語の方がまだマシだったりするし… >>319
プログラム板でC言語と混同してる疑いが持たれた奴がいたが、同一人物じゃないかね
https://mevius.5ch.net/test/read.cgi/tech/1491143438/148-
プログラム板の奴は「解決したら放置、追加質問があるならレス」だった
このスレの奴は「いることをアピール」すれば、追加情報が得られそうなので出てきた
情報搾取する輩は無視して良し プリミティブはイミュータブルとか見当違いのレスばかり
実際にはJSにそのような制限はない、実質的にそう考えても矛盾はしないというだけ
ラッパーオブジェクトの内部プロキシが吐くディスクリプタが書き込み禁止になっているだけ そんな事を言うと、JavaScriptで変数を箱モデルで説明すればいいのか
ラベルモデルで説明すればいいのか、わかんなくなるだろw
説明を実装で変えるような馬鹿だからな >>324
サンプルコードとか何いってんの?
あるコードがこういう挙動示すのは、どういう意味合いでどういう仕組みなのかって話をしてるでしょ
内部の話をする所で表層のサンプルコードもクソもないでしょ
ただ単純に、ES仕様やブラウザの内部実装を見ればいいだけでしょ >>324
煽って回答を引き出す戦略は止めて貰えませんかねえ
こういう質問者ばかりだから廃れるんだよ >>325
サンプルコードすら示せないのであれば
「MDN の記載を見当違いと言い張る」大嘘吐き扱いになるのですが
それでも構わない、と?
あと私は質問者じゃないので
ちゃんとワッチョイなり ID なり確認されたく。 >>327
> あと私は質問者じゃないので
あなた(>>324)が>>322に回答を求めてるよね
それは質問じゃないの?
> ちゃんとワッチョイなり ID なり確認されたく。
>>305はワッチョイもIDも隠しているから、あなたと同一人物じゃないと証明できてないよ
前スレで>>16のような行為が行われた現状では、こちらの可能性を疑われても仕方ない >>329
うん
質問じゃないよ
MDNの記述と真っ向から矛盾することを書いておいて、サンプルコードすら示せないってありえないじゃん
説明する責任はソッチ
なので、説明を求められるのは当然であって、それは「質問」じゃない >>329
> >>305はワッチョイもIDも隠しているから、あなたと同一人物じゃないと証明できてないよ
それは無理な主張だなあ
私は前スレからワッチョイを出している訳だが?
8f- という文字列で検索すれば全部出て来る
しかも >>305 に対して回答をしている( >>310 ) >>330-331
- あなたの中で矛盾があろうが、質問は質問
- 俺が>>322の説明責任を負ういわれはない
- 回答していようが自演は出来る(前スレの奴はやりかねない)
一番重要なのは「煽るな(=荒らすな)」 さて、大嘘吐きさんは逃亡したようですね
「プリミティブラッパーオブジェクト」 (See: https://developer.mozilla.org/ja/docs/Glossary/Primitive )と混同している気配はあったかな
>>332
ワッチョイも無し、IDも無しで言われても…
ブーメランの可能性は自覚しているのかなあ
「俺が>>322の説明責任を負ういわれはない」と断言できる根拠が無いのですね
あと、現代日本語を逐語解釈しても「疑問」と「反語」は区別できないので念のため
>>324 を逐語解釈した場合、さて、どうなるんでしょうねえ >>333
相変わらず、煽り続けるので「荒らし」と確定した 荒らしとか言いながらお前らそれを一番楽しんでんじゃん
ミイラ取りがミイラになってもなおミイラ取りするみたいな 少なくとも、"ワッチョイ 3f8f-bbbA" は論破するのが楽しくて煽ってるところがあるから、荒らしだろうな 多分、彼には「君子危うきに近寄らず」で敬遠された自覚はないと思う 俺は「天網恢々、疎にして漏らさず」でオナニーしてる >>337
MDN の記述と真っ向から矛盾すること書いておいて
「君子危うきに近寄らず」は無いでしょ
…ずいぶん高踏的な物言いですねえ… >>333
混同も何もブラケット演算子を適応した場合は
一時的にラッパーオブジェクトが作られそれへの操作になるんだが
常識だろう
だからそれに対する挙動を持ってプリミティブ型の性質を語るのはちゃんちゃらおかしい
str[n]=hoge
が働かないというのはまず、StringObjectの性質であって
Stringプリミティブ型の制限ではない
JSではプリミティブ型を書き換える手段が提供されていないというのが正しいのであって
プリミティブはイミュータブルと決まっているわけではない
ESは様々な拡張が許されており、仮にイミュータブルが書き換え可能でも
その他の部分で矛盾や不都合は発生しない
あと、仕様の話でMDNを見るな、ここを見て語れ
https://tc39.es/ecma262 あと抽象的だのなんだの言ってる奴が居るがこれもまたちゃんちゃらおかしい
仕様書を読めば分かるが仕様書というのは基本的に自然言語で書いてあるのだから
こういう捉え方しかできないというところもあれば、色々な捉え方ができるところもある
特にESの仕様書というのは物理マシンや実装エンジンの世界を殆ど持ち出さずに
正にESというものの概念を定義してるのだから抽象的であるに決まりきっている
ES仕様で最も多く使われているlet〜beなどという言葉だってその挙動をどう捉えるかは難しい
少なくともa is bはbが複写されてaとする、と考えると矛盾する
だからここはbにaという新しい名前を付けると解釈しないといけない
そういったa is bが何十何百何千積み重なって多くのロジックを形成してるので
つまるところESの変数の仕組みだって名付けの連鎖だと帰着できる
一方ESに削除や複写が殆ど無いこともこうやって全てのロジックを追っていけば分かる
勿論そういう概念にこだわっても物理マシンや実装エンジンの世界では無益に近いが
ESの仕様をできる限り忠実に語ろうとするのであればそういう無益な話をせざるを得ない >>340
同意だが、何をいっても煽られるのが目に見えているので、説明する時間が勿体ないと思う >>340
> 仕様の話でMDNを見るな
仰る通り
手抜きでした
申し訳ない ん…?
>>340
> ブラケット演算子を適応した場合は
> 一時的にラッパーオブジェクトが作られそれへの操作になる
https://www.ecma-international.org/ecma-262/6.0/
を square bracket や bracket notation で検索するも見当たらないですね
12.3.2 Property Accessors
> Properties are accessed by name, using either the dot notation:
...
> or the bracket notation:
> MemberExpression [ Expression ]
> CallExpression [ Expression ]
という記述があるのみ 【初心者に教えるとき】
a[1] = "A"; とか書いても文字列 a の内容は変わらない、と。
「書き換えることはできない、それが仕様」と。
あんまり空中戦やりたくないんだが
>>340
> JSではプリミティブ型を書き換える手段が提供されていないというのが正しい
9.4.3 String Exotic Objects を読む限り、"the encapsulated String value" を操作することが禁止されているとまでは読めないが…。
そうすると、「プリミティブ型を書き換える手段」を提供する実装が存在したとして、それは「規格に適合していない」とはいえない、
すなわち「今の時点で、プリミティブ型を書き換える手段が提供されているブラウザは無い」というのが(この板の性質上)正しいのでは?
> 4.3.2 primitive value
...
> A primitive value is a datum that is represented directly at the lowest level of the language implementation.
(以下省略)
「ECMAScript2015において、すべてのプリミティブ型はイミュータブルである」とは書かれていない。
「その意味で MDN の記述は誤っている」と言う余地もあろだろうし、「実装依存の話であって、誤っていない」と言う余地もあるだろう 【ありそうなこと】
かつて IE7 あたりで a[1] という記法が使えなかった名残で、
コーディング規約上 .charAt() を使うことになっている
IE11 では使えるし、さすがに無いか…? 配列内の要素から、簡単に、HTML の<td> タグを作るような方法が、ありませんか?
lodash にあるかな?
jQuery よりも、出来れば、素のJS が良いです
var ary = [ 1, 2, 3 ];
<td>1</td><td>2</td><td>3</td> const arr = [1,2,3];
// 文字列で作る
const str = arr.map(v => `<td>${v}</td>`).join('');
// DocumentFragmentで作る
const fragment = document.createDocumentFragment();
arr.forEach(v => {
const td = document.createElement('td');
td.textContent = v;
fragment.appendChild(td);
}); // jQueryで作る
const str = $.map(ary, function(i) { return "<td>" + i + "</td>"; }).join("");
// jQueryで作る 2
const str = $.map(ary, i=>`<td>${i}</td>`).join("");
// lodashで作る
const str = _.map(ary, i=>`<td>${i}</td>`).join("");
// lodashで作る 2
var compiled = _.template("<% _.map(ary, function(i) { %><td><%- i %></td><% }); %>");
const str = compiled({'ary': ary}); for で書いてみた
>>347
var ary = [ 1, 2, 3 ];
var str_result = "";
for (var i = 0; i < ary.length; i++) {
str_result += "<td>" + ary[i] + "</td>";
}
console.log(str_result); >>345
俺はMDNが間違っているとは言わない
>>322 実質的にそう考えても矛盾はしない と言ってるだろう
プリミティブ型がイミュータブルと言ってはいけないとまでも言わない
俺が言いたいのは、どちらにせよ
a[1] = "A"
の挙動に於いてプリミティブ型がどうのを持ち出す流れが完璧におかしいってこと
本当に言いたかったのはそこだけであとは蛇足 素のJSで書いた>>350が一番見やすくて分かりやすいな ありがとうございました。
>>351
色々勉強になり、より知識体系も改善したようです。
きっかけを作っていただき、感謝しております。 >>354
例は数値配列だからいいけど
実際には< とか > とか含む文字列だったりしないのかな
xss的なめんどくさいことにならないといいんだけど ワッチョイ 3f8f-bbbAは正義感が強いのはいいが、自信過剰で他人を煽ってるのが当然の権利と言わんばかりなのが鼻についた
自分の誤りに気が付いた途端に謙虚になったが、初めからそうすればいいのに , -,____
/レ/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;`'-,__
i!、i;;;;;;; ;;; ;; ;;; ;; ;; ;;;;; ;; ;; ;;; ;;;;;;、
>;;;;;;;;;;;;;;; ;;; ;;; ;; ;; ;;;;; ;;; ;;; ;;;;;;;;;
/〉,、;;/ / !  ̄ ̄ ̄ ̄`ヽ !;;;;;;;;;;i
/( !;;| ノ=- -==\|;;;;;;;;;;;l
`! ,.--、 ,---、 },;;;__;;;!
,i.i ●_i !_● _! リ', i| ___________
.l|  ̄ ノ  ̄ i l! /
! l,_ ,__/! < でも回答者が悪いんですよ
i ====== /〉;;/ \___________
ヽ / ルi!、
//`ー───' .//lllll\
_/llllll!、 / /|||||||||
'||||||||||||||l \_ /ニ ̄ ./|||||||||||
||||||||||||||||i, く;;;;;;;;;;|\ ./|||||||||||||
|||||||||||||||||! 〉;;;;;;/ ー/|||||||||||||| 真面目に分析すると、ワッチョイ 3f8f-bbbA の中では「このスレを正しい情報だけにしよう」という気概が強くあるのだと思う。
彼にとっては「MDNは絶対的に正しいはず」であり、それを否定する情報を寄せる輩は是正すべき相手。
だから、「お前の言ってる事は間違ってる。悔しかったら言い返してみろよ。」というスタンスでやり込めたつもりなんだろう。
一流の技術者は「自分の知識を疑うこと」が出来るし、相手の考えを聞くまでは判断を保留する冷静さがある。
そういう意味では彼は二流(or三流)だね。 >>355
https://jsbin.com/qayivic/edit?html,js,console,output
jQuery 等のライブラリにあるのかも知れんし
もっと効率的な書き方もあるかも知れんけど…
html だとバッククオートは放置でも良いんだっけ…? >>360
> html だとバッククオートは放置でも良いんだっけ…?
仕様を読まないのは「手抜き」ではなかったのですか >>343 >>347
HTMLタグを文字列で管理する手法はお勧めしない
// for-of
const td = document.createElement('td');
const df = document.createDocumentFragment();
for (let value of [1,2,3]) df.appendChild(td.cloneNode(false)).textContent = value;
// reduce
const td = document.createElement('td');
const df = [1,2,3].reduce((df, current) => (df.appendChild(td.cloneNode(false)).textContent = current, df), document.createDocumentFragment());
tr要素ノードを含めて挿入する場合は、insertCell()を使用しても良い
// insertCell
const tr = document.createElement('tr');
for (let value of [1,2,3]) tr.insertCell().textContent = value; >>347
何度も挿入するコンテンツなら、template要素も検討に値する
IE11対策は、子ノードをcloneNode()する代替コードを書けば良い
https://developer.mozilla.org/ja/docs/Web/HTML/Element/template >>360
https://lodash.com/docs/4.17.11#template
// Use the HTML "escape" delimiter to escape data property values.
var compiled = _.template('<b><%- value %></b>');
compiled({ 'value': '<script>' });
// => '<b><script></b>' 文字列を使うとDOM APIを呼び出さないので速いよ > 文字列を使うとDOM APIを呼び出さないので速いよ
文字列として扱う分には無害だが、>>360のように最終的にDOMツリーに挿入する為にサニタイズ処理が必要なら話は別だ
ネイティブで用意されている機能を使わず、手動でサニタイズするのは労力の無駄(車輪の再発名)
そして、将来的に機能のアップデートがあった場合に追従出来ない可能性がある >>366
> 手動でサニタイズするのは労力の無駄(車輪の再発名)
ライブラリ使えばいいやん > // for で単純に
> https://jsbin.com/wuxayaj/edit?html,js,output
var ary = [ 1, 2, 3 ];
var e = document.getElementById("target");
var row = document.createElement("tr");
var cell = {};
e.appendChild(row);
for (var i = 0; i < ary.length; i++) {
cell = document.createElement("td");
cell.textContent = ary[i];
row.appendChild(cell);
} > // 御教示いただいた insertCell を使用
> https://jsbin.com/fawowuv/edit?html,js,output
var ary = [ 1, 2, 3 ];
var e = document.getElementById("target");
var row = document.createElement("tr");
var cell = {};
e.appendChild(row);
for (var i = 0; i < ary.length; i++) {
cell = row.insertCell();
cell.textContent = ary[i]
}
> // one-liner
> https://jsbin.com/dowewag/edit?html,js,output
var ary = [ 1, 2, 3 ];
var e = document.getElementById("target");
var row = document.createElement("tr");
e.appendChild(row);
for (var i = 0; i < ary.length; i++) {
row.insertCell().textContent = ary[i]
} 読み返してみても、>>353に触れてるのは本人だけだった
なんかズレてる気がするなあ… 何も考えてないから。
動くコードをそのまま真似して、動けばOKで終わるやつはそうなる >>373
ライブラリはネイティブコードで書かれているんですよw >>375
知ってるよ
でも、>>365に対する反論で「手動が無駄」と彼は主張してる
それに対してライブラリを勧めるのはおかしい > それに対してライブラリを勧めるのはおかしい
理由は? >>377
>>373を見ればわかるように、
ライブラリを勧めるのがおかしいのは、ネイティブじゃないから
でも、>>376で
ライブラリはネイティブであることを認めた
こういう矛盾を平気でするやつってこと ん…
>>349 って「サニタイズは必要ない」と保証されてます? あぁ、相手にしない方がいいですね。
それかちょっとからかってやるとかw >>348
> const arr = [1,2,3];
> // 文字列で作る
> const str = arr.map(v => `<td>${v}</td>`).join('');
サニタイズしろボケ >>382
そりゃネイティブじゃなくて、DOM APIでやれば遅いだろうね VirtualDOMがなんのためにできたのか?
どういう技術なのかわかってないやつが多い
遅いDOM APIを使わないで、JavaScriptネイティブ(=文字列操作)でやるから速いんだが >>384
> そりゃネイティブじゃなくて、DOM APIでやれば遅いだろうね
え…、DOMってネイティブじゃなかったのか… >>385
違いますが、君は「前スレで散々、暴れた奴」に
「敵対する奴」ってことでFAですねw >>387
当たり前だろw
JavaScript(ECMAScript)のどこにもDOM APIは定義されてない VirtualDOMも最終的にはDOM APIで操作してるんだがな
タイミングを理解している奴はDOM APIで書いても速い >>390
今重要なのはDOM APIは遅いという事実と
遅いDOM APIを使わずにできることは
DOM APIを使わないほうが速いという事実です。 >>391
では、DOM APIを使わずに書いてみてくれ DOM APIには「速い書き方」と「遅い書き方」がある、だと思ってた 速いほうが良いとは限らないだろ
俺の会社のPC前任者が訳のわからないソフト入れてて遅かったお陰で俺だけ最新のに買い替えて貰ったし >>347
すでに書いていますが?
お題 (>>347)
> 配列内の要素から、簡単に、HTML の<td> タグを作るような方法が、ありませんか?
答え (>>349)
// lodashで作る 2
var compiled = _.template("<% _.map(ary, function(i) { %><td><%- i %></td><% }); %>");
const str = compiled({'ary': ary});
このスレってお題すらちゃんと読めない人が多いんですよねぇw 間違えた
>>393
すでに書いていますが?
お題 (>>347)
> 配列内の要素から、簡単に、HTML の<td> タグを作るような方法が、ありませんか?
答え (>>349)
// lodashで作る 2
var compiled = _.template("<% _.map(ary, function(i) { %><td><%- i %></td><% }); %>");
const str = compiled({'ary': ary});
このスレってお題すらちゃんと読めない人が多いんですよねぇw >>395
> 速いほうが良いとは限らないだろ
そりゃそうだな。開発効率のほうが重要 >>364に書いてあるだろ。ほんと呆れるわ
>>360
https://lodash.com/docs/4.17.11#template
// Use the HTML "escape" delimiter to escape data property values.
var compiled = _.template('<b><%- value %></b>');
compiled({ 'value': '<script>' });
// => '<b><script></b>' >>381
const ary = ["a<br>b"];
let str = $.map(ary, function(i) { return "<td>" + i + "</td>"; }).join("");
console.log(`jQuery_1: ${str}`);
str = $.map(ary, i=>`<td>${i}</td>`).join("");
console.log(`jQuery_2: ${str}`);
str = _.map(ary, i=>`<td>${i}</td>`).join("");
console.log(`lodash_1: ${str}`);
let compiled = _.template("<% _.map(ary, function(i) { %><td><%- i %></td><% }); %>");
str = compiled({'ary': ary});
console.log(`lodash_2: ${str}`);
…なるほど… >>400
ライブラリ依存でDOM APIとの前方互換性は排除した形か
もうわかったからこれ以降、書かなくていい >>401
それも指摘したとおり
>>348
> const arr = [1,2,3];
> // 文字列で作る
> const str = arr.map(v => `<td>${v}</td>`).join('');
サニタイズしろボケ 質問(>>347)が読めない奴は消えてなくなればいいのに
> jQuery よりも、出来れば、素のJS が良いです lodashはそりゃOKに決まってるよ。
質問者がその名前を出してるんだから
今回はライブラリはOK >>347
console.log( ary.map(v => '<td>' + String(v) + '<td>').join('') ); >>305の(2)ってどなたか説明できませんか?
アドレス同士の比較で高速なのならなんで'文字列'(1回目)と'文字列'(2回目)の===がtrueなのかサッパリ。
'文字列'(1回目)と'文字列'(2回目)は別のアドレスにメモリ割り当てられてるんじゃないの?それだとtrueはおかしくありません?
それともまさか===なのに一文字づつ比較してるわけじゃないよね? >>413
もう答えられてなかったっけ?
本人か成りすましか知らんけど >>417
勝手に質問をねつ造されても迷惑だわ
解決報告もせん奴だし、張り合いがない 本当に解決しようとするなら、回答に対して「〜が分かって、〜は〜まで理解できたが、〜が分からん」とか自分で切り分けして返信しようとするもんだ
それがないって事はたいして重要な問題でもないんだろうさ >>415
それ>>305の(2)の回答じゃないじゃないですか…
ウンチクじゃなくて回答下さいよ >>420
君に理解できない事が分かっただけでも良かったじゃないか 図々しい奴だな
「わからないんですかと煽っても無駄です」のテンプレを思い出した >>413
1文字ずつ比較してるに決まってるでしょ
それにJSにアドレスという概念はない >>425
つまり
let a = 'abc', b = 'abc';
a === b
としたときも
let a = 'abc';
let b = a;
a === b
としたときも、
'abc'の一文字づつ比較されてすべて等しかったからtrueが返されてると、そういうことですかね? 型を限定した配列を簡単に作成する方法はありますか。
例えば、String型しか代入できず、String型以外を代入したらTypeErrorを返す配列、とか。 >>426
一文字ずつ比較するとかそういうロジック的なことは仕様にはない
とにかく同じ文字コード列ということが確認できればtrueが帰る
そこでアドレスの一致を利用するかどうかはエンジンの問題
君もいい加減分かったほうがいい
仕様に沿う実装方法なんて幾つもあるということ
エンジンは最適化もしないといけないし仕様のステップどおりに実装してるわけでもない
仕様から期待される挙動と同等の挙動ができるように実装されている >>427
const i = 1;
let u;
const b = true;
const o = {};
console.log(typeof i);
console.log(typeof u);
console.log(typeof b);
console.log(typeof o); >>429
配列ではないようですが、どういう意味でしょう? >>427
Proxyを使うといい。簡単に作るとこんな感じ
ary = new Proxy( [ ], { defineProperty (self, key, desc) {
if ( typeof desc.value != 'string' ) throw new TypeError( 'value is not a string' )
return Object.defineProperty( self, key, desc )
} } )
あと必要ならlengthをケアすればいい >>431
情報ありがとうございます。
その方向性だと、最終的には、ユーザ定義の class を作る事になりそうですね。
- Proxyでプロパティget/setを制御
- lengthを定義
- Array.prototype系メソッドを定義
この辺りを自前実装しなくてもビルトイン関数があるのではないか、と考えていましたが、未だに無さそうなのが残念です。
Number 型なら Int32Array がほぼ要件を満たすのですが。 >>432
要件がよく分からんけど、>>431でもArrayのメソッド使えるよ
もし、mapとかsliceとかで返ってくる値なんかもProxyにしたいということなら
@@speciesを利用して
function StringArray( len ) {
return new Proxy( len ? Array( len ) : [ ], {
defineProperty (self, key, desc) {
if ( typeof desc.value != 'string' && key != 'length' ) throw new TypeError( 'value is not a string' )
return Reflect.defineProperty( self, key, desc )
}
,get ( self, key, rec ) {
if ( key == 'constructor' ) return { [Symbol.species]: StringArray }
return Reflect.get( self, key, rec )
}
} )
}
みたいなの作ればいいと思うよ
これ以上なにか必要? Int32Arrayは速くなるのに、
それは逆に遅くなるのが嫌だな Int32Arrayは数値以外でも例外出さないじゃん
例外出さなくてキャストしてほしいのなら
設定は許して値を利用する直前に変換掛けるか、値を利用するときに""+でもした方が良いのでは? >>434
要件をくみ取って頂いてありがとうございます。
私が期待する要件をほぼ満たしていました。
Reflect.get や Symbol.species は未知の分野だったので、学習します。
> これ以上なにか必要?
今思いつく範囲では下記がありますが、これ以上甘えるわけにはいきませんので、自分で書きます。
- new StringArray した際の [[Prototype]], @@toStringTag を StringArray 相当に
- 扱える引数を Array もしくは Int32Array 相当に Int32Array -- ex: new StringArray('a', 'b'), new StringArray(['a', 'b'])
元々、ヒントを頂ければ十分と考えていたので、ここまでコードを書いて頂けるとは思ってもいませんでした。
お世話になりました。
---
当初の質問の意図は、「Int32Array に代わる、ビルトイン関数はないか」というものでした。
Number 型だけでなく、String 型, Boolean 型, Object 型など、汎用的に使える配列用コンストラクタがあれば、コーディングの幅が広がると考えました。
Object 型には WeakMap がありますが、列挙不可能ですし、new Map は配列と比較してメソッドが圧倒的に少ないようです。
new Array か new Map を基本インターフェースとして独自classを作る事を考えましたが、ビルトイン関数があれば更に良いと考えたのが質問のきっかけです。
現状では独自コンストラクタを作成するしかないと結論しますが、何らかのビルトイン関数をご存知の方がいらっしゃいましたら、教えて頂けると助かります。
※ちなみに、>>435は私(質問者)ではありません。 ES2015以前からTypedObjectの提案があるけど何回もポシャってる
https://github.com/dslomov/typed-objects-es7
数値型はバイナリを扱うために必要だとしても
基本的にはJSではキチキチに制限するよりもそれっぽく扱っていったほうが良いと思う まあディズニーランド来て何でスパイダーマンライドが無いんだと喚いてるようなものだからな。USJ行けと。 >>438
> ES2015以前からTypedObjectの提案があるけど何回もポシャってる
そういう動きがあったのですね。
ポシャった理由が気になります…。
> 基本的にはJSではキチキチに制限するよりもそれっぽく扱っていったほうが良いと思う
Int32Array が ToNumber しているように、TypeError を返すよりも型変換した方がJSらしい、というような思想は理解できます。
ただ、コードを書いていく上で制限をかけた方がパターン数が減って都合が良い事はあると思います。
例えば、変数には一つの型を決めるコーディング規約が一般的ですが、これは受け取る変数の型を一つに限定する事で、想定される変数の組み合わせを少なくする効果があります。
どんな型が来ても良い設計にすると、7つの型全てを考慮しなければなりませんが、一つの型になれば、アルゴリズムを考えるコストは1/7です。
同じ理由で配列の値に期待される型を一つに限定する事で、考えるコストを減らす事が出来ます。 言語自体はだいたいわかったけど仕事の真似事みたいなことがしたい
なにをしたらいい? スーパー初心者です
引数について質問なのですが
(とあるページのコードです)
const func = ({ hoge = 'foo' } = {}) => console.log(hoge);
func(); // 'foo'
func({ hoge: 'bar' }); // 'bar'
3行目のように「何らかの値をオブジェクトや配列にして渡す」という場合は
そのオブジェクトや配列を定義しておく必要ないんですか? >>443
一行目の関数定義でデフォルト引数設定してあるからね。
const func = ({ hoge}) => console.log(hoge);
ならhogeプロパティ持ってるオブジェクトを引数に与えないとエラー。
const func = ({ hoge = 'foo' }) => console.log(hoge);
でhogeプロパティ持ってないオブジェクトでもOKに。hogeのデフォルト値に'foo'を指定してあるから。
const func = ({ hoge = 'foo' } = {}) => console.log(hoge);
でオブジェクトすら与えなくてもよくなる。デフォルト引数に空オブジェクト{}を指定してあるから。その後はひとつ上と同じ。 皆さん、多くの回答を、ありがとう!
確かに、ERB みたいな、テンプレートファイルじゃなく、
JavaScript(JS) ファイル内の配列から、簡単に要素を作りたいから、
文字列から要素を作るよりも、JS のメソッドで、要素を作った方がよいかも
map みたいなもので、1行で書けて、ループの記述を排除できれば、うれしいです。
可読性も高い方がよい
でも、同じ手法を、3回使うので、テンプレートエンジンでも良いのか
それと、配列内の数値は、他者からの入力ではなく、自分で用意したものなので、サニタイズは不要です
DOM 操作は遅いけど、createDocumentFragment で、まとめてDOM に追加すれば、
1回になるから、速いのでは? 速いっていうのが何を大事にしてるのか良く分からん
実際大事なのはUXであって処理の速さではない
処理を分割したほうが良いという場合も多分にある str変数にHTMLをためていって、最後にinnerHTMLをするよりも
div.innerHTML += で変更していくほうが速いのか?
createDocumentFragmentを使うほうが遅くなるんだな パーサーとレイアウトは非同期で一部マルチスレッド化されてるんだから
そのときの他の処理の状況にもよるし何が速いとか言うことはできない innerHTML += のような、既存DOMの参照を破壊するコードは、選択肢にしてないな
template要素を使う事が多い >>440
あらゆる型毎にコードを用意する必要なんかなくて、ただ欲しい型に変換すればいいんだからあまりコストはかからないと思うよ
numberを期待してるところにオブジェクトが来ても、もしかするとvalueOfが定義されてるかもしれないでしょ?
numberを期待してるところにbignumが来たらそれで弾くっていうのも勿体ない
JSはスクリプト言語でもあるし、基本的に来る値は寄越した方に責任があると思う
だから未知のものに怯えずに取り敢えず来たものは使おうとしてみるっていうのは悪くないと思う >>445
> map みたいなもので、1行で書けて、ループの記述を排除できれば、うれしいです。
ループをそこまで避けたがる理由、よく分からん…コーディング規約???
可読性についても >>352 さんのような意見もあるし、チーム構成によるかも知れず、保守担当(考えだしたらキリないな)
規約に関して言えば、DOM 操作に関してどうなっているものやら…? 何にしても実装依存…?
>>447
ウチではこんな結果
https://i.imgur.com/SHVXElj.png
IE11 は "innerHTHL += " の部分の途中で「この操作を完了するための十分な記憶域がありません」とギブアップ。
do ... while / while() {} / for
の速度比較やってるサイトも存在したような気もする
他には、jQuery で、古いIE向けの div#foo とか div.foo とかのハンドオプティマイズが逆効果になっているとか何とか
x86/x64 なら「文字列の追加処理」のコストが高いのは当然のような気がしないでもない
都度 realloc() のような処理をして、ヒープ領域からメモリ領域を確保してそう
innerHTML の実装は分からんけど、大きめのバッファを確保しているのかも知れず、状況次第で innerHTML 変更のコストもバカにならないかも
do ... while で100回やるとき
let i = 100;
do {
i--;
console.log(i);
} while(i)
とか書くのは可読性の面で駄目なんだろうなあ… >>454
そのコードって本当にdiv変数見えてるの? >>444
ありがとうございます!
すいません質問の仕方がよくなかったです。
デフォルト引数とかよりももっともっと低級の質問でした…
const fn = (obj)=>{
const keys = Object.keys(obj);
for(let i = 0; i < keys.length; ++i) {
console.log(keys[i]);
}
};
fn({a:0,b:1,c:2,d:3,e:4,f:5});
上のコードで関数fnに渡されているオブジェクトは…
const obj = {a:0,b:1,c:2,d:3,e:4,f:5};
fn(obj);
のように定義してから渡さなくてもいいの?というのが疑問なんです。 >>456
はい。直接書いちゃって構いません。
コードの分かりやすさや、効率のために変数に入れてから使う方がよいことももちろん多くはありますが、少なくとも文法上はまったく問題なく、またよくそのように書かれています。 >>457
これでモヤモヤが晴れました!
ありがとうございました。 >>456
ググるときは 無名の変数とか無名のオブジェクト でな(´・ω・`) >>459
いい加減なこと言うな!
無名の変数とやらの具体例を出してみろ! >>460
ごめんそうだね
何で変数って言ったんだろう俺 分かればいいんだ…
ビックリマーク付けてすまなかった… parseIntって、整数にするやつって習ったのだけど、
「4.956…」とかの数字を「4」って感じに小数点以下を切り捨てるのは、また別のメソッドですか?
切り捨ては、Math.floorしか方法はないですか? parseIntは文字列を単位付き整数値としてパースするものでしょ
Math.floorは負の無限大方向への丸めであって切り捨てではない
切り捨てはMath.trunc >>465
"mdn Math.floor" というキーワードでググったら良かったかも。 ページを開いた時、マウスの座標を取得する方法ってないんでしょうか?
mousemoveイベントで取得する方法だとページを開いてから1ピクセルでもマウスを動かすまでは取得できなくて不便だなぁと困っております そもそもタッチ系のデバイスだと
タッチされた後マウスが動くまでポインタが消えるものもあるし
そう考えると開いたときのマウス位置を取るってことは、開かれる前の最後に起こったイベントを取りたいってことで
越権行為だということが分かるよね どなたかご存じの方いましたら教えてください。
DOMとかいうやつのdocumentっていつ作られるんでしょうか?
function() { document.getElementById('hoge'); } // documentを宣言してないけど使える
documentがいつ、どこで、どんな風に作られるのか、技術的な仕様はあるのでしょうか?
仕様があれば、どこの仕様書のどの部分に書かれてるのか教えて下さい。
それともdocumentが作られるかどうかは(仕様がなく)ブラウザによってまちまちなのでしょうか? windowが作られるのはウインドウが出来た時に決まってるじゃん ウインドウって?ブラウザのこと言ってる?タブ複数開いたらどうなる? >>470
考え方が逆かも
documentはDOMのエントリー点となるインターフェイス
documentがあるからDOMが存在できる
HTMLだけじゃなくXMLでもSVGでも一緒
なのでdocumentが作られるのはDOMができる前
documentはDocument()コンストラクタから作られる
試しにnew Document()ってやってみるといい
いやーこんな説明したの
20年ぶりかもw 答えた気になっているようだが
> documentがいつ
→答えていない
> どこで
→答えていない
> どんな風に作られるのか
→答えていない
> 技術的な仕様はあるのでしょうか?
→答えていない
> 仕様があれば、どこの仕様書のどの部分に書かれてるのか教えて下さい。
→答えていない >>473
documentが作られるのはドキュメントが出来た時に決まってるじゃん DOMはESの枠外なのにESの仕様にはない!(キリッ って当たり前じゃんw documentが必ず存在するってことは、
jQueryの$(document).on(〜)は
body終了直前じゃなくても、$(function() {〜})の
中に入れなくても問題ないってことなのかな? >>483
問題があるかどうかは一般的には言えない
body終了直前に書くべきかどうかは色々な議論がある >>484
じゃあ問題があるブラウザは今のところ
見つかってないってことでいい? >>479
これでいいのかえ?
> documentがいつ
→ DOMが出来る前
> どこで
→ ブラウザなどの実行環境で
> どんな風に作られるのか
→ Documentコンストラクタのインスタンスとして
> 技術的な仕様はあるのでしょうか?
→ https://dom.spec.whatwg.org/#dom-document-document
> 仕様があれば、どこの仕様書のどの部分に書かれてるのか教えて下さい。
→ https://dom.spec.whatwg.org/#dom-document-document >>466-467
ありがとうございます。
perseIntは逆にMDNの説明を読んでも、なんだかよく分かりませんでした。
全角数字を数値に変えるってこと?くらいでした。
しかし、mathも記事が多過ぎで、truncと教えてもらっておいてよかったです!
なぜ、floorで習ったのかは分からないですが、floorのこともわかった気がします。
ありがとうございます! >>490
parseIntは数値っぽい文字列を数値に変えるので
0x10みたいな、文字も変換してしまう。
まあ、バグやな >>490
四捨五入はfloorが正しいで。
10引いてから四捨五入するのも
四捨五入してから10引くのも
同じだと思うやろ? >>493
まてまて
四捨五入ってのは
0〜4は切り捨て、5〜9は切り上げ
だから四捨五入なんじゃねえの? >>496
なんのために四捨五入するかだろ
半分を境目として、少ないならば、少ない方へ丸めるのが四捨五入だ >>497
でもfloorって5より上でも切り捨てちゃうじゃん
roundなら5未満だけど マイナスの世界でも切り捨ては
少ない値の方に行くべきだろ >>502
floorで四捨五入って出来なくね?って話
自分で数字確かめてから
5未満ならfloor、以上ならceilとかするならわからんでもないけど 2 1 0 -1 -2
1.1 0.1 -0.9
1.1なら1、0.1なら0なんだから、-0.9なら-1だろ 四捨五入の場合は桁に注意、だろうなあ
小数第二位とかで処理するときは
「文字列→数値→そのまま Math.round() で処理」だと誤差が出る可能性がある
'^[0-9][0-9]*(\.[0-9]*$|$)' が来る前提で
"." で split して 小数以下の必要な桁数を繋いで Math.round() するくらいしか思いつかないので
誰かもっと良い方法あったら補足して貰えるとありがたい >>506
> -0.9なら-1だろ
そういう処理をする関数が古典BASICに存在した気がする var numArray = ("" + number).split("e");
は "1e-1" とかの処理か…把握 インテルドライバーサポートアシスタントみたいなのって
どうやって作るんですか? mathとかの話を質問した者です
>>492
ありがとうございます。
その例えは、かなりしっくりきました!
math.floorは四捨五入というよりも、
何か数字があるなら「より、0に近付ける」みたいな感じみたいですね。
今回、自分はmath.floor(math.random(*6)+1);で、1〜6までの乱数に応じて、サイコロの目を振りたかったのです。
書き方、間違えてるかもです。
でも、多分、統計を取ったらfloorじゃなくて、truncにしないともしかしたら偏りが出そうですね。 ちょっとまだ、引数とか変数とか取得とか、正しく使えてないかもなので、日本語変だったら、すみません あと、それで、じゃあなんで、parseIntの話が出てきたかと言うと、Math.randomだと0.486……とかとなるので、
「+1する」と習ったのですが、「それなら*10して、小数点以下を切り捨てたらいいのでは?」と思いまして、誤解ではありましたが、parseIntが「小数点のない正数に変換する」というものだと思っていたので、
var num = Math.floor(Math.random()+1);
と
var num = Math.random()*10;
parseInt(num);
のどっちも同じ様に使えるのか?
と疑問だったのです var sai = function() {
return Math.floor((Math.random()*6))+1;
}
for (var i = 0; i < 20; i++){
console.log(sai());
} >>507
桁上げて、四捨五入して、桁戻すのじゃダメかな \d も + も使えるのですね
それなら ^\d+(\d$)$ を split して小数点以下を拾えなくもない…けれども IEEE 754-2008 を正確に理解していないので正確なコードの書き方わからんちん
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/round
の「よりよい解決策」が参考になるかも知れんけど、正確な理解が出来てないので何とも
+5 して自力で書く…のは車輪の再発明と言われそーだな >>468
「javascript mouse 座標」で検索! >>511
マイナスにならないなら、floorもtruncも同じ。
数学的に正しいのはfloorで、小数点以下をなくすのがtrunc
> 1〜6までの乱数に応じて、サイコロの目を振りたかったのです。
lodashを使うほうが間違いがない
https://lodash.com/docs/4.17.11#random
> _.random(0, 5);
> // => an integer between 0 and 5
1〜6なら _.random(1, 6); だろう >>517
数値計算でできるものを文字列に変換して、
文字列処理をして、また数値に戻すのはダサすぎる
遅いし >>519
ありがとうございます!
便利そうなのですが、これはライブラリというのをインストールしないと使えないのですね。
凄く便利そうなのに…
このライブラリをインストールするというのは、
自分が使うのではなくて、htmlのscriptの中に書くのはよくないですよね?
当然、観覧者がインストールされてなければ使えないのですよね? <html>
<head>
<script src="どこか/lodash.min.js"></script>
<script>
もうつかえる
</script>
</htm> そんなにサクッと使えるものなのですね。
ユーザーさんに取り入れてもらえるものなら、良いものですね! あ!勘違いしてました!
ユーザーにライブラリをインストールしてもらうわけじゃなくて、自分のとこのサーバーに入れといて、呼び出すだけなのですね! 自分のところに入れてもいいし、CDN使っても良い。
CDN使ったほうが速いが、CDNが落ちた場合に困る バカすぎ
欲しい範囲のランダム整数すらもライブラリに頼るようなら
そもそも完成物ごとどこかからコピペした方が良い
どうせコーディングできないのだから ちみちみ、作りたいのはランダム整数を取得する処理ではないよ?
ランダム整数を使った何かだ。
手段と目的を履き違えたらだーめだーめ それでもたかが
(Math.random()*6|0)+1
のためにlodashとか使うのは、ただのばか >>519
> マイナスにならないなら、floorもtruncも同じ。
0.5 は何になる?
> 数学的に正しいのはfloorで、小数点以下をなくすのがtrunc
負の無限大への丸めが数学的な四捨五入? 切り上げ/捨てって言葉を使うのをやめた方が混乱が少ないかもね
Math.floor()
引数より小さい最大の整数
Math.ceil()
引数より大きい最小の整数
Math.round()
引数を四捨五入した整数
Math.trunc()
引数の小数部分を切り飛ばした整数 vanilla JS でのコードが既に出ているのに lodash を持ち出すってイミフ
パフォーマンスに有意な差があるかどうかは知らんけど >>528
Math.floor(Math.random()*6)+1
と
Math.floor(Math.random()*6|0)+1
の違いが良くわからん…
ビットごとの or 取って何が変わるんだろう >>534
もしかして、パフォーマンス以外で見るべき所がわからないの? >>536
知らんし分からんのだが
何を見るべきなのだろうか…?
複数人が関わるプロジェクトとかなら、規約の範囲に留めなければならないことくらいかなあ?
(そういうのなら既存のモノを import させたりしそうなものだが、そういう話が出て来ない時点で(ry >>538
vanilla JS でも
var my_rand = function (max, min) {
Math.floor(Math.random()*(max-mix+1))+min
}
※エラー処理は省略している
を関数にブッ込めば可読性も似たようなものかと…
ビット演算の必要性は分からん
あとは名前汚染の危険性か
エラー処理については全体で統一的に処理する、か
この点が面倒なら lodash もアリか
個別の問題としては、前提条件不明なので何とも >>535
整数化している
ビット演算はintegerだから >>540
なので、floorが無駄
ついでに32bitに丸めてる(デメリット) >>541
あ、でもちょっと結果変わる、のかな?
負の数だったときとか >>539
有名ライブラリだと、入社したばかりの人でも
前に使っていて知ってるってことがある
その場合に使い方を調べる必要がない。
オレオレライブラリだとそうはいかない とんでもないスパゲティコードって、
長年使われてきた自社製ライブラリもどきが原因のことがかなりあると思う
まあJavaScriptじゃそこまでの規模のに関わったこと無いけど >>540
ふむ…
+( hoge ) とどう違うん? ああなるほど
+( hoge ) だと数値化に過ぎない、と 分かる人にはわかると思うけど、こういうのが
「可読性が低い」っていうんやで
このコードにはどういう意味があるんだ?ってみんなが思ってたら
コードレビューにならないだろ https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
* の方が | より優先なので
(Math.random()*6|0) + 1
で充分、と
コレ lodash で書く意味あるん???
即値の 6 とか1 とかを都度書いて問題なさそうにも見える >>547
> このコードにはどういう意味があるんだ?ってみんなが思ってたら
> コードレビューにならないだろ
この点は総論として同意できる
大昔に INT(RND(1)*6)+1 とか山ほど見てたからな…。
実務上でコレの慣例的表現が見られないらしいことにビックリだよ。。。
その意味では lodash はアリ、なのか |0にはなんにも異存はないけど
演算子の左右は1スペ空けてほしい… >>549
> その意味では lodash はアリ、なのか
そんなもん場合によるとしか言えんだろうな
> 大昔に INT(RND(1)*6)+1 とか山ほど見てたからな…。
このような主観からもわかるように、
山ほど見てきたから = じゃあ山ほど見てない場合はどうなんだ?って話
山ほど見てきた人が、この書き方を知らないわけがないので、
山ほど見てない人というのは確定
その人にlodashを使う回答をするのはありだし、それみて、その人が便利だと思ったのだから
lodashを使った回答をした意味があったということ 山程見てなくても
これくらいは見てすぐ理解できるくらいの人を雇いたいなあ
現場では 多くの場合 Date.now()%6+1 で良い件 + や |0 は熟練者なら大概知ってる
初心者をターゲットにするなら、勿論、使うべきではない たった数行の処理に名前付けるだけでオレオレライブラリなんて言われたら
最早何もできん よっしゃ!サイズ10の乱数の配列作ったろ!
Array.from({length:10},()=>Date.now()%6+1);
//=> [4, 4, 4, 4, 4, 4, 4, 4, 4, 4]
あ、あれ?
一方…
Array.from({length:10},()=>(Math.random()*6|0)+1);
//=> [4, 2, 5, 2, 4, 2, 5, 2, 6, 6] 普通はこう。
a = Math.floor( Math.random( ) * 6 ); //=> 0〜5
a + 1; //=> 1〜6
「浮動小数点数 | 0」
これをよく見るけど、可読性も悪いし、
どういう意図なのか、わからないから、考え込まされる
書いた人の仕様(答え)は、読む人にはわからないから、
考えてもあくまで推測だから、正解とは言えない!
最初から答えがあるのだから、推測する時間が無駄! >>519-525
lodash
https://github.com/lodash/lodash
CDN もあるみたい
// Cherry-pick methods (つまみ食い)で、そのメソッドだけを読み込める?
var at = require( 'lodash/at' );
at.js だけを読み込めるのか? Math.floorも|0も可読性はたいして変わらんよ
_.random(1, 6)ならわかりやすい?
lodashのドキュメントなり読まなきゃ意味は分からんだろ
可読性いうなら、コードはどれでもいいからコメントつけろよ まあアンダースコア始まりの関数なら
アンダースコアかローダッシュだなってのはなんとなくわかるからいいでしょ
そんなに珍しいもんでもないし
関数名と前後のコードでだいたいわかるし > 可読性いうなら、コードはどれでもいいからコメントつけろよ
コードの可読性が悪いからコメントが必要になる。
コードとコメントの二箇所に同じことが書かれてるのはdryではないし
コメントがコードの内容を正しく示しているかレビューする必要がある > lodashのドキュメントなり読まなきゃ意味は分からんだろ
読まなきゃ意味がわからない = 読めば意味がわかる
オレオレライブラリだと覚えた所で他のプロジェクトで知識を
再利用できる可能性は低く、覚えても無駄になるが
有名なものであれば、知識を再利用できる >>557
そのような呼び出し方で上の結果にならないアルゴリズムである保証はMath.random関数にはない
Math.randomの実装がDate.nowを使っていても仕様に反しない
一度に沢山欲しいときは保証されているcrypto.getRandomValuesを使うこと hoge | 0 ) を使うことに関して、現にこれだけ議論がある訳だし
| 0 ) を使って良いか否か、コーディング規約に入れるべきかなあ
lodash を使う業務なら、議論の余地は無いだろうなあ
>>564
サイコロって話だから、乱数のエントロピーは Math.random() 程度で良いかと思って書きましたが
crypto.getRandomValues で「保証されている」と言い切られると若干違和感… このサイコロの目の6つが一定の回数の結果、最もバランスよく出るのが優れた正解ということになるのですかね?
習った先生の話だと、Math.floor(Math.random()*6+1)は比較的、6が出にくいだったか、出やすいだったか…と言ってた気がするのですよね。
まだ、習った範囲だとfor文とかで1000回とか、サイコロの結果を出す事までしか頭が回らないのですが、
きっと「1〜6までの数字を1000回出した結果、どの数字が何回出たか?」みたいのを出力する方法がありますよね
for文で1000回振って、ifで仕分けするみたいな感じですかね >>566
- Math.random()が返す範囲
- 6倍した時の範囲
この辺を頭の中で整理して考える作業が足りない サイコロなんだから回数なんか配列でインクリメントすればいいだけ const counts = [...new Array(7)].fill(0);
for (let i = 0; i < 100000; ++i) {
counts[Math.floor(Math.random() * 6 + 1)]++;
}
console.log(counts); // [0, 16571, 16727, 16748, 16686, 16448, 16820]
まあ、普通は配列でやるよね >>565
cryptoの方は暗号学的な一定レベルの保証がある
Mathの方は実装者の考え方次第で下限が無い
どの程度の乱数か予想することもできないので程度という言葉は使えない
その辺りがどうでもいいと言うときだけMathの方を使う サイコロに関しては商業ゲーでもやらかした例がいくつかあるから侮れんよな >>571
https://jser.info/2016/01/27/math.random-xsfhit/
主要ブラウザの仕様は、おおむねこんなかんじ
crypto.getRandomValues はああいうことを「保証」すると言えるのか不明
…なお「10回振る」のを1000万回繰り返しても
Chrome / Firefox ともに1度も重複が無かった模様
Worker 以外の何らかの方法で複数スレッド作れば
マルチコアも活かせるんだろうけど未確認 | 0
すると int32 (singed int) になる様子 @ Chrome / Firefox / IE11
Math.floor は uint64 あと
JS 上では、ARM って big endian だったっけ
x86 / x64 は little endian だけど
uint64 / int64 の実装は今後どうなるか不明
BigUint64Array のサポート状況は MDN 等を参照されたし
(Chrome で似たようなドキュメントがあるかどうかは未確認) >>574
既出 >>541
実装の前に、ビット演算子の仕様を参照 >>579
> ビット演算子の仕様
>>541 では「 uint32 ではなく int32 になる」ことが明示的に書かれていませんよ?
https://www.ecma-international.org/ecma-262/6.0/#sec-grouping-operator-static-semantics-isfunctiondefinition
12.11.2 Static Semantics: IsValidSimpleAssignmentTarget
12.11.3 Runtime Semantics: Evaluation
参照のこと。 >>578
> Math.floorはdoubleを返すんだが
> 20.2.2.16 Math.floor ( x )
>
> Returns the greatest (closest to +∞) Number value that is not greater than x and is equal to a mathematical integer. If x is already an integer, the result is x.
>
> If x is NaN, the result is NaN.
> If x is +0, the result is +0.
> If x is ?0, the result is ?0.
> If x is +∞, the result is +∞.
> If x is ?∞, the result is ?∞.
> If x is greater than 0 but less than 1, the result is +0. Numberは倍精度浮動小数点なんだから、別にdoubleでもいいじゃん
つーか、その程度の突込みの為にわざわざ仕様だらだらコピペするなよ >>580
趣旨は「仕様を参照」なんだが
初めから仕様を出してくれたなら、何もいわなかった 間もなくES2019(ES10)が勧告されるってときにES6の仕様をリンク紹介してるやつ何なの?
もう丸4年も経ってるってことにそろそろ気付こうや
きっと中身があんまり変わってないと思ってるんだろうけど
特にここ2年くらいで冗長さを減らして読みやすくする試みがされてきてるから
ES6の仕様書にリンクする価値は全く無い
リンクする時は未来永劫残したい時は最新版、書き捨てで良い時はLS版 12月に追加機能を決めて6月に勧告という流れで毎年出る
したがって次のES2019は数日後
次の次のES2020は2020年6月勧告予定
もうLS版は2020になってる Math.floor が返すのは integer なのに Math.floor(Infinity) → Infinity >>581で言うintegerは整数という意味で型とは関係ないのにね tamper monkyで音をならしたい
以前書いたスクリプト↓でできるとおもうんだが、音声ファイルをどう呼び出せばいいのかわからない。
PC内のファイルにはアクセスできないよね?
フォントみたいにWeb上からよみだせないのかな?
function playSound() {
var audioElement = document.createElement("audio");
audioElement.src="pico2.mp3";
document.body.appendChild(audioElement);
audioElement.play();
} // --- あ、tamper monkyってのは、ブラウザ上でユーザスクリプトを実行するためのchrome 拡張機能です >>593
base64にエンコードしてjsコード内に埋め込んでから>>595するって手もあるぞ 特に制限かかってないサイトで使いたいのであれば
サーバー上にあるものなら普通に絶対URLで指定すればok
ローカルにあるものはDataURIに変換してスクリプトに直に書く
twitter並の制限がかかってるサイトの場合は
DataURIでデータを用意してDataURI to Blob等で検索して出てくる変換かけてURL.createObjectURLでURLを生成
github並にガチガチに制限かかってる場合はTampermonkeyではなくViolentmonkey独自の
@inject-into content
使わないと無理かも ダウンロード用のURL指定したら↓でできました
一秒ごとに音鳴らしたいのだけど↓のplaySound()をグローバルで定義してsetInterval()でループしたらループするごとに音源のサイトにアクセスするのだろうか??
audioElement.src = は グローバルに直接書いたほうがいいのだろうか?
DataURIとbase64も興味あるけど難しそう
function playSound() {
var audioElement = document.createElement("audio");
audioElement.src="https://soundeffect-lab.info/sound/button/mp3/decision1.mp3";
document.body.appendChild(audioElement);
audioElement.play();
} // --- サーバー側の設定がおかしくなければキャッシュされるはずだけど
そのplaySoundを毎秒呼び出したら毎回appendChildして無駄にメモリ消費し続けるよ
audioElementは外で定義してsetIntervalでやるのはaudioElement.play();だけでいい 1秒ごとに音鳴らしたいなら、再生時間1秒の音声データを
ループ再生させりゃいいだけだろ
なにめんどくさいことやろうとしてんだ その方法やsetIntervalだと誤差が積み重なるでしょ
setTimeoutで誤差の蓄積を最小限に留めるのが次点で
WebAudioAPIを使ってスケジューリングするのがベスト 漏れは、Ruby で、selenium-webdriver, nokogiri を使って、
ローカルPC 内の画像を、ブラウザで見てる
<img src="C:/Users/ユーザー名/Pictures/a.jpg">
これで見れる
URL なら、前に、file:/// を付けて、こうとか
file:///C:/Users/ユーザー名/Documents/index.html 画像見るだったらブラウザの標準ファインダで見ていけばいいんじゃないの? https://insights.stackoverflow.com/survey/2019#technology-_-web-frameworks
Most Popular Technologies
Web Frameworks
1. jQuery 48.7%
2. React.js 31.3%
3. Angular/Angular.js 30.7%
4. ASP.NET 26.3%
5. Express 19.7%
6. Spring 16.2%
7. Vue.js 15.2%
8. Django 13.0%
9. Flask 12.1%
10. Laravel 10.5%
11. Ruby on Rails 8.2%
12. Drupal 3.5% >>605
> React.js and Vue.js are both the most loved and most wanted web frameworks by developers, while Drupal and jQuery are most dreaded. Wanted jQuery5.0%からして、jQueryシェアは既存シェアが残っているだけで、新規に増やしたくない様子が伺えるな でもまだ増えとるで?
https://w3techs.com/technologies/history_overview/javascript_library/all/q
1年で+0.7% Usage
73.3% 73.3% 73.6% 73.9% 74.0%
1年で+0.4% Market Share
97.0% 97.2% 97.3% 97.3% 97.4%
Reactなんて1年で+0.1%しか増えてない 増やしたくないと思うのと増えるかどうかは別の話で、
Reactの方が良いと思っても、現実にはReact使うまでもないことばかりってことなんだろうね >>605
vueをやり始めた俺が
これを見ても折れないハートの強さはどこでクローン出来ますか? Bootstrap は、jQuery で作られているから、
Bootstrapを使うと、jQueryの利用率は上がっていく! Angular, React.js は、ゼロとみなしてよい
Ruby on Rails では、jQuery 必須。
Vue.js を使う人もいるかも
Junichi Ito (伊藤淳一)の動画
Rails 5.1で作るVue.jsアプリケーション 〜Herokuデプロイからシステムテストまで〜
https://www.youtube.com/watch?v=ycOeM2umXkY laravelとvueの組み合わせの勉強に週末を費やした僕にも
なんか優しい言葉ください! >>616
シェアが全てではないよ
自分が必要と思う技術を身につけることが大事 Ruby で、Sinatra, Rails フレームワークを学ぶと、CakePHP も出来るようになる。
なぜなら、CakePHP は、Rails のコピーだから!
実は、JavaScript のNode.js, jQuery, Lodash も、Rubyに似てる!
Kotlin も、Rubyに似てる >>598です。みなさんありがとうございました。
>>599さんの方法でやりました。
>>600さんの方法についてですが、
Webページ上の数値を一秒ごとに読み取ってある数値以下になると音を鳴らし続けたいのですが、コードの書き方がよくわからないです。
そっちのほうがいいかもしれませんが、setInterval()で繰り返し音を鳴らす方法に特に大きな問題ないようでしたら、今のままでやりたいと思います。 再取得の可能性を無くしたいのなら
blobで取るか、abでとってaudiobufferにするか SWを使うか
色々ある localStorageに表形式のデータを格納するならどのような構造にするのがよいですか?
検索は頻繁にしますが、過去データの改変はあまりする予定は余りありません。
重複登録を削除するために直前のデータを削除するぐらいです。
例えば
名前 性別
太郎 男
花子 女
二郎 男
みたいなデータです。
var data = {
"name": ["太郎", "花子", "二郎"];
"gender": ["male", "female", "male"]
}
↑のようなかんじですが
列ごとにJSONにいれて列の各要素を配列にするのを考えています。
JSONはJSON.parseでlocalStorageを出し入れ
配列は、デリミタでストリング化←→配列化して出し入れ
にしようかと。
何かもっと良い方法ありますか?
JSから結構離れていてJSONへのデータの出し入れの仕方もよくおぼえてないのですが… データの新規登録も頻繁に行います
データは常に上の表で言えば行単位で追加します。
配列の中に↓のような配列入れるパターンも考えています。
[ ["taro", "male], ["hanako","female"]] # 行単位で配列の入れ子にするパターン
[ ["taro", "hanako"], ["male", female]] # 列単位で配列の入れ子にするパターン
統計処理する場合は、列単位でまとめたほうがいいですよね? 俺ならこうするな
var data = [
{ name: '太郎', gender: 'male' },
{ name: '花子', gender: 'female' },
{ name: '二郎', gender: 'male' },
] 表形式にこだわらず
プログラムで使いやすいかたちのままぶっこんじゃう意識低い系です 配列のほうがメソッドが充実してて扱いやすいきがするんですがどうですか?
JSONだとデータ処理どうなんでしょう?
例えば、太郎という名前の人の身長だけ取り出して、平均を求めるとかそういうふうに、
統計処理をヘビーにやりたいのですが。 JSONてのはあくまでファイルやlocalStorage等に出し入れする時のフォーマットでしょ?
628みたいに配列の中に連想配列を入れる方法一度だと思うけど 結構斬新な研究をしてるな
俺はミカという女はキツイ性格をしてると思う JSONをlocalStorageに出し入れするよりも、
俺のアンダーバーをミカというキツイ性格をしてる女に出し入れしたい。 >>630
データは>>628のようにして、太郎の身長の平均を求めるなら
function averageHeight(name) {
const target = data.filter(e => e.name === name)
return target.reduce((acc,cur) => acc + cur.height, 0) / target.length
}
console.log(averageHeight('太郎'))
みたいに書ける var data = [
{ name: '太郎', gender: 'male', height: 180 },
{ name: '花子', gender: 'female', height: 160 },
{ name: '太郎', gender: 'male', height: 170 },
];
lodashを使えば、平均を求める関数が用意されてるから
更にわかりやすくかける。統計処理をヘビーにやりたいなら便利
console.log(_.meanBy(_.filter(data, {name: '太郎'}), 'height')); 単一の値を返す場合はこっちのほうがシンプルかな?
console.log(_(data).filter({name: '太郎'}).meanBy('height')); 次期「Microsoft Edge」のプレビュー版、 Windows 7/8/8.1にも提供開始
https://www.google.com/amp/s/forest.watch.impress.co.jp/docs/news/1191/455/amp.index.html
よっしゃよっしゃ
後はアップデートで強制インスコしてくれれば
IEのみとかいうクソ環境を無視して話が出来る インスコされても古いIEが残ってる限りなんにも変わんないよ
古いIEが急に使えなくなったら役所や準役所相当企業の
化石HPも1年位かけてアップデートされるだろうけどさ >>626
名前が、唯一(ユニーク)のものなら、普通は辞書を使う。
名前が重複ありなら、id みたいなユニークな列を用意する
基本的には、データベース設計と同じ
>>636
みたいに、オブジェクトを使うこともできる >>642
好き勝手に付けたり付けなかったりしたら思わぬところで意図しない動作をすることがあるのでセミコロン付けたくないならJavaScript Standard Styleというそれなりに人気のあるスタイルガイドに従うといい。
https://qiita.com/munieru_jp/items/ca16cbfa859468137d2e
まあ一番人気のスタイルガイドはセミコロン強制だけどね。 >>644
>>643を読んでJavaScriptスタンダードスタイルガイドが一番人気だと言ってると思ったの?小学校の国語からやり直した方がよいのでは?w 不必要なセミコロンを付けないように心がけている人は付け間違えてもすぐにミスに気が付く
必ず付けないと気が済まない人はつけ間違いやreturnなどで過度に付けていても気が付かない セミコロンのつけ間違いとかreturnに過度につけるって実害あるの?
セミコロンなしの実害はreturn+改行で間違いなくあるけど >>647
セミコロンなしの実害はreturn+改行ではない
return+改行の問題はセミコロン付ける派が、セミコロンを付けなければ継続するという勘違いによるもの >>648
てめえの犯したバグになんで人の流儀が関係あるんだよボケ
イスラム教徒が過ちを犯すのはキリスト教徒の教えのせいだっていうのと同じだぞ ちなみに一番人気の
Airbnb JavaScript スタイルガイドでは?
セミコロンは付けるべきですか?
もちろん。
なぜ? JavaScriptはセミコロンなしで改行を検出すると、自動セミコロン挿入(Automatic Semicolon Insertion)と呼ばれる一連の規則を使用して、
その改行をステートメントの終わりと見なし、(名前が示すとおり)改行の前にセミコロンを入れなければその行が壊れると考えた場所に、セミコロンを配置するかどうかを決定します。
ただし、ASIにはいくつかの風変わりな動作が含まれており、JavaScriptが改行を誤って解釈した場合、コードは壊れます。
新機能がJavaScriptの一部になるにつれて、これらのルールはより複雑になります。
ステートメントを明示的に終了し、不足しているセミコロンを検知するようにリンターを構成すると、問題に遭遇するのを防ぐのに役立ちます。
https://github.com/mitsuruog/javascript-style-guide/blob/master/README.md#semicolons >>650
でもさ、Rubyは逆にセミコロン省くんだよな。
セミコロン省いたために変な挙動をすることがあるのは同じなのに >>646
で、つけ間違いやreturnなどで過度に付けることの実害は?
純粋にケースを知りたいんだが あいつらはバカだから。
浅薄な考えで関数呼び出しのカッコ省略できるようにしたせいで高階関数でdef定義の関数渡したり返したり出来なくなってprocやらlambdaやら.callでの呼び出しやらでムッチャクッチャのグッチャグチャになった。 仕様でセミコロン必須にしとけばよかったのにな
こんなつまらんことでもめなくて済んだのに あいう
かきく
と云うようなテキストがある時
コレをそのまま
var text = " あいう
かきく";
みたいにそのまま代入できないのでしょうか?
何行もあると↓みたいに書き直すのがすごくめんどくさいのです。
text = "あいう\nかきく"
text ="あいう" +
"かきく" >>656
バッククォートで囲む
var text = `あいう
かきく`; >>649
頭大丈夫?
セミコロンを意図的に省いたが自動挿入によって思わぬ結果を招くのは
論理的に考えてどちらかといえばセミコロン必須派の問題でしょ
省略派は常に自動挿入されることを意図してコードを書いてるのだから
自動挿入されると思っててされてなかったというのなら省略派の問題だけど セミコロンなしの副作用ってそんなに無いんだよね
例で関数式の直後に括弧があるとくっついちゃうとか、returnのやつとかあるけどさ
普段そんなコード書かないもんな
必要な時だけ書くけどね この二つだけでOK
・return の後は改行しない
・括弧で始まる文の先頭には ; をつける >>660
function f1() {
return
1;
}
function f2() {
return
2
}
console.log(f1()) // undefined
console.log(f2()) // undefined 甘いなぁ。
その程度の理解なら大火傷が目に見えてる。
セミコロン付けたくないならおとなしくjs standard styleに従え。
従っていればセミコロンなしでも問題ないように知見入れ込まれてるんだから。 セミコロンなしのメリットって何?
どっちみちプログラマが気を付けることには変わらないよね >>659
誰も意図して書こうとはしないだろう
誤って書いてしまう場合があるからダメなのだよ
所詮人のやることと思わなきゃ >>663
「タイプ数が減る」しか思いつかないな
「文法を知っている必要がある」という点ではどちらも同じ なんか癖になってるからセミコロンつけないのはソワソワする
ご飯の後にご馳走さま言わない感じに近い 極力セミコロンを付けないと気が済まないって
極力constを使わないと気が済まないとか
極力型チェックをしないと気が済まないとか
みたいでヒステリックで嫌いだな 逆だね。可能な限りセミコロンを書かずに済ますにはASIの摩訶不思議挙動を完璧に把握している必要がある。
セミコロン省略派のほうがconst厨に性質が近い。 javascriptでスクレイピングしたいのだけど
リンクをクリックして読み込んだら実行みたいなのはどうすればいいの? >>670
fetch(url)で
IE対応したいなら
ポリフィル読むか、ライブラリ使うか、XMLHttpRequestで テーブルデータが複数ページにまたがってるサイトがあるとします。
そこでテーブル内の各データを取得して←実行
次ページに移る
以降繰り返しクロムのデブツールのコンソールで行いたいと思っています 実行、という言葉がここでは通じてないオレオレワードだよ
や借りように説明してくれ すまん誤記
わかるように説明してくれ
HTMLは実行するものじゃない テーブルのデータが静的なデータならfetch/XMLHttpRequestで取得したページのデータを解析してテーブル内の各データを抽出する
テーブルデータがjavascript等を使って動的に作成されるならselenium webdriverあたりを使ってスクレイピングする ブラウザ上で行わないとダメな理由が良く分からん
取得した情報を何へ流し込んで、その後どう利用したいのかしらん >>674
その取得したテーブルデータをどうしたいんだ?
データベースに保存したいの? >>669
>>660
そういう思い込みが一番ダメ 無職じゃないよ設備屋兼投資家してる
でも厨房からやってて一番経験長いのがWeb Cから派生した言語はほとんどセミコロンいるからな
無いと気持ち悪いんだろうよ セミコロンなし強要したいんなら他の言語行ってくれとしか
jsの歴史と現状見るに害悪というか混乱の元 > 「文法を知っている必要がある」という点ではどちらも同じ
これに尽きる
理解していれば、どちらも同じ なんやセミコロン要らんかったんか!www
これから全部省いたろ!めんどくせーしwww
var a = []
(function(a){
console.log(a)
})(1)
//=> [] is not a function
あ、あれ?(´;ω;`) var a = []
;(function(a){
console.log(a)
})(1)
// 1 JavaScriptは仕様を変えてセミコロンなしで
動くようにしたほうが良いんじゃないだろうか? var b = 64
var regexp = 4
var ig = {exec: function(){return 8}}
var a = b
/regexp/ig.exec("str")
console.log(a)
//=> 2
??????? >>690
var b = 64
var regexp = 4
var ig = {exec: function(){return 8}}
var a = b
;/regexp/ig.exec("str")
console.log(a)
// 64 >>689
今でもセミコロン無しで動くでしょ
次の行との結合が発生する場合があるというだけでかといって
セミコロンが要らない代わりに1文1行制限が入っても野暮ったいし
今がちょうどいいバランスだと思うよ いまさらだが>>658が意味不明だな
セミコロン必須派は意図的にセミコロンを省略すること自体がありえねんだよバーカ
なにが論理的に考えてだよ このように、「いつもセミコロンを省略できる」わけではなく、「どうしてもセミコロンを付けなければいけないところ」があり、それを「覚えなければ」なりません。
大した量ではありませんが、普通にセミコロン付けていくならば「本来覚えなくてもよかった」、「本質と関係ないクソ知識」です。 >>660
括弧と演算子だな
あとreturnのやつはいらない >>692
出来ない人がクイズを出してるつもりなのか、
セミコロン省略のbadケースを紹介してるつもりなのか、
知らんが、迷惑行為には違いない 要らないものを省こうとするのは自然な考えだと思うけどな
そういえばクラス構文では以下のようにセミコロン付ける事もできるけど
class C {
method(){};
}
セミコロン必要派の人は付けるんだろうか
付ける・付けないとしてそれは何を思ってのことなんだろうか ぼく「よし、文の終わりにはセミコロンっと」
バカ「プーッ! なにムダなセミコロン付けてんの?www 付けなくても動くのにwwww」
ぼく「・・・」
−−−
バカ「あ、あれ意図通り動かない……」エラーになっちゃう……」
(3時間後)
バカ「あっ、そうか! ここセミコロン要るところだった! さすが俺、華麗に解決できたぜ!ww」
ぼく「・・・」 とりあえず、セミコロン付けとけ勢が
function foo(){};
と書いてるのを見かけることがある セミコロンはつけすぎても問題は起こらないが(例えば2個連続の;;)
「省いた場合に問題が起こりうるということ」が問題だということが、
なぜ未だにわからないんだろうか。 >>695
セミコロン必須派は文の終わりにセミコロンを付けようとする
毎行セミコロンを付けようとするバカは居ない
当然複数行に渡る文を書くこともあるし、その際には必須派でもセミコロンを付けない
そういうときに思わぬ自動挿入が起きて嵌まるというのはどちらかというと
自動挿入を利用している省略派ではなく必須派の問題
論理的に考えたらわかる >>699
セミコロン要らない派はなぜそこで要らないか、なぜそこで要るのか、全然分かってないんだねwww
functionの時点で関数式ならセミコロン付ける、関数宣言ならセミコロン付けない、だバーカw
セミコロン付ける派は関数宣言の終わり、
function foo() {};←ここにセミコロンなんて付けねーよww
function foo() {}←ここまでで関数宣言、
;つけたらただそのあとに空文追加してるだけじゃんwww
関数式と関数宣言の違いすら分からんのかこれだから脳死セミコロン付けない派はwwwww >>703
今までの流れ見てきて分かるようにセミコロン省略派必須派に限らず
ASIの挙動を抑えておかないと嵌まる可能性が残る
暗黙の型変更のようにJSerは無視できないこと
ならばそのJSらしい性質をJSを書く上で活用しようというのは自然 >>704
それはつける派つけない派の違いじゃなくて文法を知っている知っていないの違いでしかない
まさかセミコロンつけない派のほうが文法を知ってると言いたいのかな? >>702
成立しないよ。
付けなければいけないところ、付けなくてもよいところ、そのどちらでも、何個もセミコロン置いても余分なものは単に空文になるだけだから。
逆に省いてはいけないところを省いちゃうととんでもないことになる。
セミコロン省略は仕様書も読まないバカにはお勧めできない。 >>705
自分はクラス構文について話してるんだけど?
クラス構文中のセミコロンは空文ができるわけでなく
構文の柔軟性の一部でスペースのようなオプショナルな存在
それをセミコロンを付けようと意識してる人はどう考えるのかを教えて欲しかっただけだよ 宗教はこうして戦争の火種になっていくんだな
宗教コワヒw そもそもクラス構文は使わない。聳え立つクソだあれは。 >>707
勿論付けない派の方が文法を知っていると言う
文法を知っているのにわざわざ付けるっていうのは完全に好みの話になるし
文法を知らないのに大胆にも付けないっていうのは論外なこだわり
だからあくまで文法に詳しくなく安全側に倒して付けようとしてる派と
文法を良く知って不要なものは減らそうという派という対比で当然話してる
君はそうじゃない意味がない対比がしたいのかもしれないけど俺は巻き込まないでくれよな >>704
つかそもそも複数行の文の途中ってそれASI自体起こらなくね? もともとセミコロンをバグなく極限まで省略するにはASI含め高い文法知識が要るという話だっただろ。
それに初心者でも脳死でセミコロン省略できるって噛みついてきたんじゃないか。いい加減にしろよ。 >>707
> それはつける派つけない派の違いじゃなくて文法を知っている知っていないの違いでしかない
>704ではないが、それが最重要ポイントだと思うぞ
セミコロン必須/省略は大した問題ではない >>716
俺は>704に賛同してるわけではないから >>713
文法を完全に分かっているのなら当然どんなスタイルでも問題は起こらない
だがそうではないので意図しない問題が起きやすい弱点がそれぞれにある
セミコロンを付ける派も、return文など意図しない形で文が区切られて問題になることもあるという話
これは何十スレも前から度々話題になっているので詳細は割愛するが
==の代わりに積極的に===を使うようになればむしろ嵌まりやすくなるのと同じ >>714
意味がわからない
脳死でプログラミングはできない
プログラミングというものは難しい
だけど入門者がセミコロン省略スタイルで学ぶのは
それはそれでその癖が付くだけだから何か問題があるとは思わないな
セミコロンを付けたほうが安全と思ってるかもしれないけど、
案外そうでもないよということでしょう セミコロンあり派
if (x) return; ←あ、戻り値がないんだな
a();
セミコロンなし派
if (x) return
a() ←ん、これ戻り値のつもりかな、それともif文の外? >>719
セミコロン取った方が安全なの?
どうなの?
どっちが安全なの? >>720
派閥に関わらず、文法を理解して適切に使え、という考えがなぜ理解できないんだろう? 一番人気のスタイルガイド、Airbnb JavaScriptスタイルガイド曰く、
セミコロンは付けるべきですか?
もちろん。
なぜ?
JavaScriptはセミコロンなしで改行を検出すると、自動セミコロン挿入(Automatic Semicolon Insertion)と呼ばれる一連の規則を使用して、
その改行をステートメントの終わりと見なし、(名前が示すとおり)改行の前にセミコロンを入れなければその行が壊れると考えた場所に、セミコロンを配置するかどうかを決定します。
ただし、ASIにはいくつかの風変わりな動作が含まれており、JavaScriptが改行を誤って解釈した場合、コードは壊れます。
新機能がJavaScriptの一部になるにつれて、これらのルールはより複雑になります。
ステートメントを明示的に終了し、不足しているセミコロンを検知するようにリンターを構成すると、問題に遭遇するのを防ぐのに役立ちます。
https://github.com/mitsuruog/javascript-style-guide/blob/master/README.md#semicolons 何でそうまでして省きたいのか個人的にはサッパリ分からないが、どうしてもセミコロンを省きたい、かつ仕様の深い理解なんてしたくないという人は、
Airbnb JavaScriptスタイルガイドに比べ全く人気のないJavaScript Standard Styleというスタイルガイドにメクラで従うといい。
https://qiita.com/munieru_jp/items/ca16cbfa859468137d2e >>723
どれだけ文法を理解して適切に使おうとしても、人がすることだからミスはある
それならミスが少ないほうを使え、という考えがなぜ理解できないんだろう? >>722
実はどちらも危険でも安全でもない
毎歩杖を付きながら歩けば安全か?
足元がおぼつかず見通せない状況ならそうだが
杖が原因で危険が起こることもあるし
大衆にとっては付こうが付かまいが安全になったり危険になったりしない
杖を付いても付かなくても躓くことはしょっちゅうあるし
躓いたところで大ゴケすることなんて滅多にないし
躓くことを一々恐れて何か対策をしたりはしない なんかつけない派は詭弁が多くない?
採用する理由だって今風だからとか、かっこいいから、とかしかないでしょ?
他に何かあるのメリット >>725
何でそうまでして要らないものを省こうとしないのか個人的にはサッパリ分からない。
スペースと違って見にくくなるだけの余分な記号を何故わざわざ付ける? >>727
ヘルメット付けてても必ず助かるわけじゃないという当たり前の事実は、
ヘルメット非着用を推進する理由にはならない。 >>729
JavaScriptはセミコロンなしで改行を検出すると、自動セミコロン挿入(Automatic Semicolon Insertion)と呼ばれる一連の規則を使用して、
その改行をステートメントの終わりと見なし、(名前が示すとおり)改行の前にセミコロンを入れなければその行が壊れると考えた場所に、セミコロンを配置するかどうかを決定します。
ただし、ASIにはいくつかの風変わりな動作が含まれており、JavaScriptが改行を誤って解釈した場合、コードは壊れます。
新機能がJavaScriptの一部になるにつれて、これらのルールはより複雑になります。
ステートメントを明示的に終了し、不足しているセミコロンを検知するようにリンターを構成すると、問題に遭遇するのを防ぐのに役立ちます。 ぼく「よし、文の終わりにはセミコロンっと」
バカ「プーッ! なにムダなセミコロン付けてんの?www 付けなくても動くのにwwww」
ぼく「・・・」
−−−
バカ「あ、あれ? 意図通り動かない…… エラーになっちゃう……」
(3時間後)
バカ「あっ、そうか! ここセミコロン要るところだった! さすが俺、華麗に解決できたぜ!ww」
ぼく「・・・」 >>728
JSって色んな書き方ができて
ああいう書き方もある、こういう書き方もある
色々試して色々発見して自分のスタイルとJS知識を研磨していった先で到達するものであって
採用するとかいう話ではないと思うよ
Array()の代わりに[]を使うのと同じく
そちらの方が洗練されていると感じるから使う
Array()の方が分かりやすいと言えば勿論そうかも知れないけどね 見にくくなるだけの記号って・・・
世にあふれるJavaScriptのコードをどういう気持ちで見てるんだろう
俺の思い通りにならないムキーってか? >>730
だから君は24時間風呂はいるときも寝るときも付けろというんでしょ
でも俺はポイントポイントで必要性があるときだけ付ければいいと思う
俺は常にヘルメットを被って生活してる君に対して違和感を感じてる
今ヘルメットを被らないで良いかどうかも分からない可愛そうな子にしか見えない >>734
俺は[]の代わりにArray()を使ってもいいと思うし、
セミコロンをわざわざ付けて見にくくするのもいいと思ってるよ >>737
新しい配列を構築するためにArrayコンストラクターを使用することは、単一引数の落とし穴と、Arrayグローバルが再定義される可能性があるため、通常、配列リテラル表記を使用することをお勧めします。
例外は、Arrayコンストラクタを使用して、コンストラクタに単一の数値引数を与えることによって、意図的に指定サイズのスパース配列を作成する場合です。 >>735
いや?
お前が工事現場で「ヘルメットを付けても必ず助かるわけじゃない」と言ってヘルメット着用の看板を剥がして回るキチガイだというだけだぞ。 >>726
ミスがあるなら、正しい文法を覚えればいいだけの話
覚える気がないなら、セミコロン必須でも省略でもミスは起こる A「セミコロン省いたらエラーになることがあるよ」
B「文法を学んで気を付ければいいよ」
A「それならセミコロン省かないほうが安全じゃない?」
B「邪魔な記号だからいいんだよ!俺が気に食わないの!」 >>737
よーし配列リテラルなんてうっちゃらかしてArrayコンストラクタで配列作るぜ!
var arr = Array(1, 2, 3);
console.log(arr);
//=> [1, 2, 3]
絶好調だぜ!配列リテラルなんて使ってられるか!要素1の配列も作るぜ!
var arr = Array(1);
console.log(arr);
//=> [undefined]
あ、あれ…? (´;ω;`) >>740
お前ミスしたことないの?
正しい文法を覚えててもミスはするの
覚える気があってもミスはするの
省略したほうがミスの可能性が高いの
わかる? >>741
マウント取りたいだけなら好きにやればいいが、俺は省略も必須も文法さえ守れば好きにやればいいと思うぞ
「文法さえ守れば」どちらでも問題はない >>744
分からん
ミスをするのは「知らないから」
それ以外に原因はない >>743
思い付くのはgithubスター数と、babel-presetの週間ダウンロード数だな。 >>746
その知らないことによるミスを事前に減らしましょうって言ってんの
それがわからん? 私、失敗しないのでwww
ドラマ化決定!wwwww 仕事で書くときはプロジェクトのスタイルに合わせるんだし
個人の趣味で書いてるのは好きにすればいいじゃん ・文の末尾にはセミコロンを付ける
・returnで値を返すときは直後に改行を入れない
結局これが素人にもプロにも最強 >>748
君は「何か良くわからないけど、セミコロンを付ければエラーがなくなるみたいです」と覚えるのかね? >>753
少なくとも「俺はすべて知ってるからセミコロン省くぜ、あ、あれ?」よりはまし 「何か良くわからないけど、セミコロンなんか付けなくてもエラー出ないみたいです。だから付けません」 >>755
文法を守った気になっている奴がASIによる余計なバグを追っている時間を
他のバグ潰しに使えるってこと いずれにしても、「何か良くわからないけど」と考える奴がミスを犯すのは確かだな >>759
どこがマウント?
事実を言っただけだが
反論をどうぞ 文法を守れ
→文法を守った気になってる奴が云々
→???? >>760
答えになってないじゃん
煽ってるだけじゃん 内容に反論できなくて悔しくてマウントマウント言い出しただけだろww 相手がいってもいない虚像を勝手に作り上げて論破している気になってる奴はホント消えてほしい >>761
守ろうとすることと(能力的に)守れるかどうかは別問題
ここまで言わなきゃわからない? まさか、>>757が答えになっていると本気で信じているのか... >>767
君は「何か良くわからないけど、セミコロンを付ければエラーがなくなるみたいです」と覚えるのかね? >>768
君は「何か良くわからないけど、セミコロンなんか付けなくてもエラー出ないみたいです」と覚えるのかね? 一番人気のスタイルガイド、Airbnb JavaScriptスタイルガイド曰く、
セミコロンは付けるべきですか?
もちろん。
なぜ?
JavaScriptはセミコロンなしで改行を検出すると、自動セミコロン挿入(Automatic Semicolon Insertion)と呼ばれる一連の規則を使用して、
その改行をステートメントの終わりと見なし、(名前が示すとおり)改行の前にセミコロンを入れなければその行が壊れると考えた場所に、セミコロンを配置するかどうかを決定します。
ただし、ASIにはいくつかの風変わりな動作が含まれており、JavaScriptが改行を誤って解釈した場合、コードは壊れます。
新機能がJavaScriptの一部になるにつれて、これらのルールはより複雑になります。
ステートメントを明示的に終了し、不足しているセミコロンを検知するようにリンターを構成すると、問題に遭遇するのを防ぐのに役立ちます。
https://github.com/mitsuruog/javascript-style-guide/blob/master/README.md#semicolons >>767
だから、
「何か良くわからないけど、セミコロンを付ければエラーがなくなるみたいです」
のほうが
「俺はすべて知ってるからセミコロン省くぜ、あ、あれ?ここ省いちゃダメだった」
よりも、
ASIによる余計なバグを追っている時間を他のバグ潰しに使える分ましだと言っている >>773
つまり、Yesってことか
はっきりいえよ
歪曲表現を好む日本人かよw var a = []
(function(a){
console.log(a)
})(1)
//=> [] is not a function やっぱりセミコロンなし派って詭弁でごまかすよね
メリットも語れないし草生やすだけ >>773
君は知らないからセミコロン省略でミスをする
セミコロン省略派は知らなければ使えないので理解しようとする
ミスをすれば、さらに深く理解しようとする
理解すればミスはしない
理解しなければミスをする
それだけの話 var a = [];
(function(a){
console.log(a);
})(1);
は美しくなく、
var a = []
;(function(a){
console.log(a)
})(1)
は美しい?ww
省略派のゲテモノセンスはよく分からんww >>746
ミスする奴は必ずいる
そういうやつはどうすればいいの?教えてプロ もともとセミコロンをバグなく極限まで省略するにはASI含め高い文法知識が要るという話だっただろ。
それに初心者でも脳死でセミコロン省略できるって噛みついてきたんじゃないか。いい加減にしろよ。 >>779
世の中にセミコロン必須にしているスタイルガイドがあるのは何故だと思う? >>783
世の中にセミコロン不要としているスタイルガイドがあるのは何故だと思う? >>781
ミスの原因、原理を突き詰める事だ
>>783
知らない事を良しとしているのだろう >>784
ごめん、わからない
俺はセミコロン付ける派なので
てかたまには答えたら?答えられないの? 中出ししたけど妊娠しなかったよ?
コンドームなど不要! >>783
すまん、読み間違えた
セミコロン省略しても良いケースを熟知しているのだろう この議論総括するとセミコロンを付けない方の勝ちだな
付ける方は付けないやり方も長く試したけど、実際こういう問題が起きた
とは自分の実力がないと言ってるようで主張しにくいもの
周りの付けない人を何十人も見てきたけど統計的にそのグループは
こういう間違いを犯しやすいという事実もないしさ
一方付けない方は付けるのも試してる上で付けなくても問題はないと
nは小さいけど実体験を語ってるわけで
付ける方が詭弁連呼や失礼な根拠要求しかできないのに比べると圧倒的に強いね
客観的に見て議論は付けない方の勝ち
ただし自分は付け続けるし人にも付けることを強く進める
以上、終わり あ、レスアンカー先が違ったのか
下記が正しい
>>783
知らない事を良しとしているのだろう
>>784
セミコロン省略しても良いケースを熟知しているのだろう >>787
コンドームは必要なときにつけるもの
彼女も居ないのに24時間付けてないと気が済まない性癖を偉そうに主張されてもね セミコロンつけないやつは全員仕様を理解している奴という超理論を
覆すことはできんなw ;(function () {}) ←これがキモイんだよなー 一番人気のスタイルガイド、Airbnb JavaScriptスタイルガイド曰く、
セミコロンは付けるべきですか?
もちろん。
なぜ?
JavaScriptはセミコロンなしで改行を検出すると、自動セミコロン挿入(Automatic Semicolon Insertion)と呼ばれる一連の規則を使用して、
その改行をステートメントの終わりと見なし、(名前が示すとおり)改行の前にセミコロンを入れなければその行が壊れると考えた場所に、セミコロンを配置するかどうかを決定します。
ただし、ASIにはいくつかの風変わりな動作が含まれており、JavaScriptが改行を誤って解釈した場合、コードは壊れます。
新機能がJavaScriptの一部になるにつれて、これらのルールはより複雑になります。
ステートメントを明示的に終了し、不足しているセミコロンを検知するようにリンターを構成すると、問題に遭遇するのを防ぐのに役立ちます。
https://github.com/mitsuruog/javascript-style-guide/blob/master/README.md#semicolons セミコロン省略派と誤解されている気がするが、俺の意見は>>745 >>795
笑えるのが付けない派がこれを書くってことだよなwww
心の中で地の涙を流してるのだろうかw >>801
どうすんの?
var a = []
(function(a){
console.log(a)
})(1)
//=> [] is not a function >>800
何が面白いんだか
連投すれば、誰でも迷惑に感じることぐらい理解しろよ >>803
イライラしてんなww
当たんなよwwww ID:lh1CUoFSは理解すればミスは起こらないと言っている
俺は理解してもミスは起こると言っている
ここが永遠に埋まらない溝 >>806
君はセミコロン省略派をやり込めたと思っているようだね
何事にも例外はあるということをいちいちいわないと理解できないタイプ >>808
> 俺は理解してもミスは起こると言っている
論理的に根拠を説明してくれるよな? 例外が多いのはセミコロン省略の方だよね。
結局全部省略できないで「こういう場合は付けないといけません」アホかと。 ちょっと違うな。
「こういう場合付けないといけません。さもないとバグります」 >>812
アホな理由が分からん
理解して使う分には全然かまわないぞ、俺は もともとセミコロンをバグなく極限まで省略するにはASI含め高い文法知識が要るという話だっただろ。
それに初心者でも脳死でセミコロン省略できるって噛みついてきたんじゃないか。いい加減にしろよ。 >>811
ならお前も逆論を論理的に説明しろ
ID:lh1CUoFSは説明しているが、お前は何一つ説明してないだろ
お前がしたなら説明してやる 知らんがな
全員が同一人物に見える病気なら、通院しろ >>816
え…、「理解してないものはバグる」って説明しないと理解できないものなのか? >>819
>>808を読めないのか?
「理解してないものはバグる」じゃない、「理解したらミスらない」だ
この2つは全然違うぞ >>820
すまんね
「理解したらミスらない」が真なら、「理解してなければミスる」も真
以上 あと理解してないものは必ずバグるわけじゃないぞ
うまくいく場合もある >>821
だから「理解したらミスらない」が真だと思わないって言ってるの
「理解したらミスらない」が真である根拠を論理的に説明よろ >>824
原理を100%理解したら、100%期待通りに動くように書けるだろ
お前の言ってることはまるで分らん 絶対ミスらないなら全部ハンドアセンブリで書いてりゃいいんじゃね?
絶対ミスらないクセにやることがJavaScriptのセミコロンの省略w >>826
お前の理想の世界ではな
現実には
・タイプミス
・修正忘れ
・minifyによる圧縮
などにより仮に全員が完全に理解していてもミスやバグは起こるんだよ もう一度言うけど、
仕様を理解していることと、それを完璧にコードに反映できることは別なの >>828
その作業工程を十分に「理解」してなかったからだろ 立証責任を放棄して、先に反証責任を負わせる>>808に驚愕した >>830
だから理解した「つもり」になっている奴が現実にいるという話だよ
ID:lh1CUoFSもそうでないとは言い切れんだろ?
それなら最初からミスする前提でミスの少ないセミコロン付けをしましょうね
と最初に戻るわけだ >>832
なんのこっちゃ
作業自体を理解してない奴に触らせるのが正しいのか? >>685
tc39見てると一体いくつのステキな提案がASIハザードのせいで沈んでいったか…… 俺の結論は>>796のコピペのとおり↓これ
>問題に遭遇するのを防ぐのに役立ちます。
>>833はこんなのくそくらえだって言うんだろ? 絶対にミスらないならそもそも問題に遭遇しないからな 絶対にミスしないんならwasmをwatで手書きしてれば? >>779 理解すればミスはしない
>>808 俺は理解してもミスは起こると言っている
>>832 だから理解した「つもり」になっている奴が現実にいるという話だよ
相手の主張に「つもり」を付けて反証した「つもり」になっているのが「永遠に埋まらない溝」ですね >>825
Examples of Automatic Semicolon Insertion の内容は、過去のも最新ドラフトのも同一だが
Rules of Automatic Semicolon Insertion は若干変化がある、と >>838
俺は「仮に全員が完全に理解していても」と前提を言ったのに
>>830が「十分に「理解」してなかったから」とかわけわからんこと言い出したのに付き合って
>>832で合わせただけだよ
もちろん本人が意図しないミスだってあるよ 省略しない派 → (´;ω;`)
省略する派 → (´ω`) >>840
>>830は真っ当な意見だと思うがね
君が勝手に「理解」の範囲をECMAScriptに限定していただけ >>842
まあ最初の流れでは仕様を理解すると言っていたからね
そうやって文脈をすり替えるのは結構だけど俺の結論はこう
「作業工程も仕様も理解していてもミスるからセミコロンはつけよう」 >>843
>「作業工程も仕様も理解していてもミスるからセミコロンはつけよう」
それを理解していたら、>>828をミスる理由がなくなる >>828 は
理解しててもしてなくても発生率が有意に変わるとは思えん
「理解していれば防げた」はずの分だけ、ミスやらバグやら減るんじゃね 頑固だね〜
タイプミスも修正忘れもしないってか?大した自信だね もう「良くわからないけど、ミスるからセミコロンを付けよう」でいいんじゃない?
>>808から段々、文脈を変えてきてるし、都合よく論理を改変されてる気がしてならないよ ミスしないなら変数に分かりやすい名前付ける意味もないね。aとかbとかで十分。むしろそれが望ましい。
ミスしないならキレイにインデントする必要もないね。むしろ詰めるべき。必要なところだけワンスペース。 >>846
それはもうセミコロン省略が関係なくなってる事に気が付いてる? 「ミスってセミコロンをつけ忘れました」
「だからセミコロンを付けろと言っただろ」
「・・・」 >>845
そのとおり
理解しててもしてなくても、セミコロン付けると発生率が下がるのよ 結論:
絶対にミスしないウソつき以外にはセミコロン省略は使えない >>851
セミコロン必須にすると、タイプミスや修正漏れが減る根拠を教えて下さい! >>849
関係あるよ
var a = []
(function () {})() ←タイプミス セミコロン関係ない、「ミスをしないからミスしにくい手法など気にする必要はない」理論に持っていったのはセミコロン省略おじさんのほう 下手なminifierだとASIを認識しなくてバグるよ >>853
ごめん発生率はASIによるバグの発生率だったわw 対してセミコロン省略派の詭弁テクはなかなかのものがある。
いつも屁理屈言い訳ばかりしてるから上達したのだろう。 セミコロン付けときゃ余計なバグの心配もないのに
なんでそんな拘るかね┐(´-`)┌ヤレヤレ 総括すると、こういうことらしい
理解した「つもり」になってる奴はセミコロン必須にしろ var a = []
(function(a){
console.log(a)
})(1)
//=> [] is not a function なし派はメリット一つも言わないんだよなー
理解しろ理解しろ理解したらバグは起こらない!
いやそれでメリットは? >>865
セミコロンなくてスッキリしてていいな!
今度からそう書くわ! 結論
ASIの仕様に詳しくなりたい人は、セミコロンを省略しよう!
理解が浅いとバグっちゃうから、スリル満点だぞ! >>866
>>666
理解しろ派は省略派ではなかったろ
読解力を身に着けた方がいい セミコロン必須派ってなんでこんなに気持ち悪いんだろ
jQuery房と同質のものを感じるわ いや理解する必要があるのは省略派だろ
頭沸いてんのか 内容に反論できなくて結局人格否定に走るしかないのねw
哀れみw めりっと
・ASIの仕様に詳しくなれる
デメリット
・意図しない関数呼び出し
var a = []
(function () {})() //=> [] is not a function
・意図しないreturn文
return
a + b
・ダサいスタイル
;(function () {...})()
![1,2,3].map(...) >>873
>>797で再指摘されてんのに、注意力散漫すぎだろ ASIの仕様を実践できるのはセミコロン省略派だけ!
君もセミコロン省略派になって、セミコロン省略スタイルでしか役に立たない知識を身に付けよう! むしろ、セミコロン必須のメリットが突っ込みどころ多すぎた ![1,2,3].map(...)
これ全然直感的じゃないよなw
もうセミコロンさえなければ何でもいいという執念を感じるw つける派のメリット
>>796で書かれているとおり
デメリット
つけない派の根拠0の執拗な攻撃に遭う 「文末にセミコロンなんて付けたくない! 死んでも付けないぞ!」
つ >>865
「ぶ、文頭ならおk」
なんでや… >>883
そりゃ俺らの言葉なんかより権威ある出所からのお言葉なら大満足でしょ ☆セミコロン占い☆
セミコロンを省略しちゃうあなたは見た目に騙され本質が見えないタイプ。
プログラミング言語はRubyがお似合いかも!? >>885
そして、別の権威者が反対の事を言い出したら、意見を100%反転させるのだな 今時、コーディング規約を思考停止で守ってる奴は珍しくない
意味を分かってないから、タイプミスや修正漏れは日常茶飯事 >>887
まあ言うてgithubシェアNo.1ですから 必須派ワー必須派ワー
相手にケチつけてばかりで何もメリットを語れない省略派w
大脳新皮質も省略してしまったのだろうか?w let i = 10
do
console.log(--
i
)
while (i)
こんなのアリなのか
初めて知った ■セミコロン必須派の主張
- 同じ文章を何度もコピペ
- 「つもり」を後付け
- 誤認によるセミコロン省略は「タイプミス」
- 作業工程を理解しても「タイプミス」「修正漏れ」「minifyによる圧縮」のミスは起きる
- セミコロン必須でも「タイプミス」「修正漏れ」「minifyによる圧縮」のミスは減る
- 作業工程も仕様も理解していてもミスるからセミコロンはつけよう
- 立証責任を放棄して相手に説明要求
- 答えを何度もはぐらかす
- ID:lh1CUoFSと省略派の区別がつかない 元々セミコロンがある前提でスタートしたJavaScript
ASIはつけ忘れた時の補完用でしかないとは作者の言葉だ
セミコロンが嫌なら別の言語に行くべきだ i = 10; do console.log(--i); while (i)
i = 10; do console.log(--i); while (i) i = 10; do console.log(--i); while (i)
はokで
i = 10 do console.log(--i) while (i)
はエラー、なのか const f1 = function () { console.log(1) } const f2 = function () { console.log(2) }
も
f1() f2()
もエラー、と const a = 1
2
console.log(a)
はokで
const a = 1 2
とか
const a = 1
2 console.log(a)
とか
const a = 1 console.log(a)
とかはエラー、か このようにセミコロンを付けるとこんな気持ち悪い書き方ができます。 minification 絶対にしないことが保証されているなら
セミコロンは省略しまくって良いんだろうね minificationは関係ない。なりすまし工作乙。 実際はセミコロン省略向けLintの設定もあるんだし
省略したからと言ってなにか問題になることはないよね これもう宗教論争だからね
善悪二元論でやりあってるうちは永遠に決着しないよ >>907
if ( condition )
// do something
なら問題ないよー
セミコロンの有無での差は、これから確認してみるね 有名どころだとBootstrapがセミコロン省略派
よって、省略しても大規模プロジェクトできるのは証明済
好きにすりゃいいと思う >>905
一部の mifniiier だとエラーになる可能性があったようだけど
今は全然問題ないの? Bootstrapを大規模っていうのはちょっと違うかな?
まあいいや、とにかくminifyも問題ないので
宗教論争してもしょうがないね
自分はセミコロンなんて基本prettierに打ってもらえばいいじゃん派です あ
先日の integer 問題ですが
console.log(Number.MAX_SAFE_INTEGER)
とかが参考になって、整数どうしの演算でも相応の範囲で誤差がでないっぽい…?
「拡張倍精度浮動小数点数」とか「四倍精度浮動小数点数」だと話が変わるっぽい…?
正確な所は今から調べるんで、妙なことを書いてたらごめんなさい >>904
"ES6" が何を指すかによるんじゃないかなあ…?
「どういう機能を使い、どういうモノは避ける」みたいなのが示されれば、具体的な話も出来るかも
極論 IE11 でも「ES6 の範囲のだけど IE11 で問題ない」モノなら… あるテキストをテキストエリアに入力
それを.element1.value で取得して整形
整形したテキストを element2.textContent で別のテキストエリアに出力
てのをやってる。
ここまではうまく出来た。
で、出力用のテキストエリアのテキストを、JSからじゃなくて、キーボードとか普通の方法で一度変更したりすると
その後JSから .textContentを使って出力ができなくなる。
これどうして?回避方法ある? textareaの書き換えなら、textContentではなくvalueじゃないのか?
https://jsfiddle.net/8e64dmr7/ >>917
value でできました。
最初 value でやってたけど出来ないからtextContentにしたんだけど
なんでだろう…。
最初はボックス一つでインプットボックスにアウトプットしてたからなのかな? >>914
JSのNumber基本数値はDoubleなんだから
Doubleで整数が1刻みで表せる値の間に計算結果が収まる限り誤差は出ない
それかNumberの代わりにBignumを使うと良い >>919
御返答、ありがとうございます。
Chrome 75 系では
console.log(typeof 1152921504606846976n)
は bigint でした。
MDN では Firefox 68系で BigInt のサポートが始まる予定と書かれていますが
ベータ版で確認してみるのも手…なのでしょうか
なにぶん今 Windows8.1 なので、カナリア EDGE は…他に影響ないなら使ってみても良い…? 必要なら躊躇せず使えばいい
もしくはwith-proxyでも実装は大変だがスマートにかける
それか面倒くさいbigint系ライブラリで妥協するか ぐぐるとjsfiddleをvimモードで操作できるってかいてるけど
vimなんて選択肢keymapにないけどどういうこと? DOMSubtreeModifiedが非推奨とのことですがどのように書き換えたら良いでしょうか?
<div contenteditable></div>
<div contenteditable></div>
document.querySelectorAll( "[contenteditable]" ).forEach( function( value ) {
value.addEventListener( "DOMSubtreeModified", function( event ) {
console.log( value.innerText )
});
}); 残しといていいんじゃない?
MutationObserver使えるブラウザの時だけ使うようにすれば document.querySelectorAll("[contenteditable]").forEach(node => {
new MutationObserver(records => {
console.log(node.innerText);
}).observe(node, { childList: true, subtree: true });
}); 質問です
同一平面上に散るn個の点の
他の点との距離を全て計算したいんですが
どうすると計算回数少なくなりますかね? WebGLを利用してマトリックス演算するのが最も速い 誘導されて来ました。
JavascriptでDataTablesが使われているときに
左上のselectをTampermonkeyから自動でselectedにしても
表が更新されません。
どうすればいいのでしょうか。 ・特定のイベントを起こす
・スクリプトに介入して関数を実行する
・今ある表は消して自分で表を作る 初心者の質問ですみません
スクリプト側から「今ブラウザが(どの程度)アイドル状態か」を知る方法ってどんな手があるでしょうか?
タブを開いている最中(読み込んでいる最中)だとか、CPU負荷だとか色んな指標がありますが、
少なくとも今時分のタブだけじゃなく、ブラウザ全体での負荷量や作業量が知りたいのですが。 いちサイトのスクリプト風情が、ユーザー様のブラウザのリソース情報をぶっこ抜きたいという話? >>934
スクリプトからは自分の情報しか見れません。
他の情報は見れたら困る。絶対禁止。 へー、どうやってスクリプトから自分の情報見んだよ。書いてみろよ。 >>934
タブ割当メモリを見る(他のタブにも影響される)
performance.memory (.measureMemory策定中)
CPUの稼働状況を測る
performance.profile()
表示負荷を書けたくない描画は
requestPostAnimationFrame
アイドル中に処理がしたければ
requestIdleCallback
システムがロックされていたり、ユーザーのアイドル状態を検知するには
IdleDetector >>938
ありがとうございます
まさにrequestIdleCallback が目的のことに使えそうでした
急ぎではない処理を、ブラウザの他の重い作業(他のタブの作業やブラウザアドオン等)の邪魔をせずに始めたい
(そうしないとブラウザが果てしなく重くなり自分にとっても操作が緩慢になるだけなので)という要求があったのですが
こういう機能がついたということは他の人にとってもこれが欲しい状況はあるあるだったのでしょうね。
それにしてもこういう便利な機能を網羅的につらつら読んで知っていける本ってあるのでしょうか >>939
とりあえずここでも見たら?
https://www.chromestatus.com/features
HTML5ムーブメント時代からの重要点が1500項目くらいにまとまってるので
HTML、HTML5の基本を勉強してこれを全部読み、さらに興味があるものを深掘りするのが良いと思う 質問です(初心者です)
{(ストレージなど)を読み、加工して、書き込む}、という一連の処理部分があるとします、
そこを実行してる時に他の同類の処理が並行して走ると、ストレージの加工の前後関係が崩れてしまうという時に
{}内の動作だけは他の(タブやスレッドの?)処理を止めたい、割り込まれたくない、という時はどうしたらいいんでしょうか? >>941
一連だけど同期的じゃないんだよね
ほぼ同期的ならIDBでwriteモードで開けば
その間は他はwriteモードで開けない
汎用的にやるならLock APIを使って皆で管理する DBに制御する機能が無いなら
皆でルールを守って使うということになる ユーザからの入力文字数を一定以内に制限する必要があるのですが、
CSSで使える色名は何文字にするのが良いでしょうか?
rebeccapurpleのようにいきなり色んな理由で長名の色が入る事があるのではないかと危惧しています。
かと言って合理的で最小限の数値としてその数字を選んだ根拠を示さないと行けないので十分余裕を持って50文字とか、ちょっとキリ良く20文字位にする的な決定はできません。 >>945
LineモバイルのID入力欄はこんなかんじ
<input type="text" name="loginAccount" class="md01InputTxt FnRequired FnOneByteAlphabetNumeric FnMin FnAllowEnterToGo"
maxlength="20" minlength="6" placeholder="ログインID" value="" /> >>945
> CSSで使える色名
hex強制で6文字とか <input type="color">じゃダメなんですか? hexだと "6" だな
16進数強制で最大6文字(だめか) 一つのボタンに2つのイベントリスナってつけられますか?
なんとかしてできないでしょうか?
ユーザスクリプトで既存のサイトのボタンにイベントリスナを追加したいのですが。 あ、addEventListenerでふつうにできるっぽいかな? 複数のイベントリスナをつけるためのaddEventListener
.onclick=とかだと1個しか付けられなかった チラシの裏ですけれども
はあ、バグが取れない…
半日取り組んで成果なし。
もう疲れたよ… jQuery なら、こういう感じ。
「jquery event 複数」で検索!
$( 'CSS セレクター' ).on('click mouseenter', function() { 処理 } )
$( 'CSS セレクター' ).on({
'mouseenter': function() { 処理 },
'mouseleave': function() { 処理 }
}) 数字プロパティやlengthプロパティへのアクセスをケアする機能を持ったオブジェクトがarray >>965
自分で試せば分かる事は自分で試す、基本 ニートだけどhtml cssやってjs jquery勉強中だけど、どれぐらいできるようになったら就職していい? >>968
知識・技術がいくらあってもそんなにage評価されん
技術・知識がちょっとでも足りないとsage評価されっけど
なので出来ないことが無いように頑張れ
あったら全力で隠して、依頼があってから死ぬ気で身につけよう >>968
ちまたにある tips とされるもののうち
20個くらい間違ってると発見できたら
そのコード提出した上で職探すよろし
次スレで FAQ として掲げられたページの
カビ臭い部分全部直す、とかね >>970 >>971
サンクス、時間だけはあるから色んなサイトで一通りやってくるわ ・うるう年判別コードを Date 型をもちいて実装せよ
・ゼロパディング("3" -> "0003") を、if も slice も使わずに実装せよ
・0.1 + 0.1 = 0.2 というふうに誤差が出ないように、小数と小数の和を求めよ
…とか… それが基礎になるから、
Linux の数十の基本コマンド・シェルスクリプトと、
Ruby で、Sinatra をいじくって、Rails やれば、サーバー側のウェブプログラマー!
Rubyからは飛躍的に世界が広がるから、Kotlin, Go にも行ける Ruby なんかをやる時間があったら Python をやりましょう Rubyより jQuery の方が優先順位は遥かに高かろう
最初は jQuery なんて「そんな名前のものがあるんだな」程度でガン無視で良い >>968
今だったらLayoutAPI使ってgrid再現したり
PaintAPIでカスタムボタン要素作ってみたり
Houdini系を巧みに扱えればHTML、CSS、JSの技術と
一連のレンダリングフローの知識があると評価してもらえると思うよ 100点満点中1点ぐらいだろうけどな
(そんなもんやればわかること) スムーズスクロールをJSで書こうとしたけど駄目でした。
難しい・・・・ >>982
頑張れ
でもScrollIntoView()だけで済むようになっちゃうかも… このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 120日 3時間 8分 17秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。