[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

タグ

javascriptに関するrryuのブックマーク (233)

  • 【JavaScript】関数名をclose()にするのは気をつけろ

    単なる自分のやらかしの共有です。この記事は事実をもとにしたフィクションです。 消し忘れたclose()関数 あるときモーダルコンポーネントを閉じる、close()関数というのを作りました。後日、リファクタリングをするときこの呼び出されているclose()関数がとあるコンポーネントから取り除かれることになりました。しかし誤って1つ削除し忘れてしまい、close()関数が取り残されてしまいます。 このとき、import文なども取り除かれたのですが、何故か未定義エラーなどは出ずに見過ごされてしまいました。(察しの良い人はピンとくるかも) 何故か消えるウィンドウ そんな中、消し忘れたコンポーネントを含む画面で特定の手順を踏むと開いたブラウザウィンドウが閉じてしまう現象が確認されるようになりました。 どうやら発生源は先程のリファクタリング作業らしい… window.closeというJavaScrip

    【JavaScript】関数名をclose()にするのは気をつけろ
    rryu
    rryu 2024/11/10
    即時関数を作ればその中では割とやり方だというのは何か良くなさそうという事例がこれか。
  • フロントエンドの移り変わりは早すぎるのか

    インターネットでは毎日のように言われることですが、私はそこまでではないと考えています。 ネットでよくそう言われる理由として考えられるものと、それを踏まえてどう向き合っていくとよさそうか、個人的な考えをまとめてみます。 なぜ言われるのか 言語が実質的にJavaScript一択 バックエンド、というかサーバサイドでは技術選定に「言語の選択」が入りますが、フロントエンドでは実質的にはJavaScriptにほぼ固定されます(TypeScriptも別言語ではないので、ここではJavaScriptに含めます) サーバサイドと比較して「技術の移り変わりが早すぎる」と評される場合、多くはその人の使用しているとある言語と比較されているように思われます。 実質的に言語が固定なので、比較するならすべてのサーバサイドの変化の総量と比較するのが妥当でしょう。 PHP + Python + Ruby + go + J

    フロントエンドの移り変わりは早すぎるのか
    rryu
    rryu 2024/02/22
    安定しないのはライブラリやフレームワークとかじゃなくてツールチェーンなんだよな。他人のソースコードは大体ビルドできない。
  • 【JavaScript】querySelector よりもパワフルに DOM からノードを取得しよう!【XPath】 - Qiita

    const getNodesByXPath = (xpath) => { const result = document.evaluate( xpath, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null ); return [...Array(result.snapshotLength)].map((_, i) => result.snapshotItem(i)); }; const nodes = getNodesByXPath('//div'); nodes; // [div, div, div, ...] 3. XPath とは 3.1. 概要 XPath とは XML 文書(HTML 含む)のさまざまなノードを指し示すことができるパス文字列のことです。 XPath は XML Path Language の略

    【JavaScript】querySelector よりもパワフルに DOM からノードを取得しよう!【XPath】 - Qiita
    rryu
    rryu 2024/01/28
    XPathEvaluatorってもはやブラウザで普通に使えるのか。
  • JavaScriptでObjectに空のStringを足すと0になる!?……わけではなかった

    ASTをみてみよう この不思議な現象を調査するために、AST(Abstract Syntax Tree: 抽象構文木)の状態を見てみることにしました。ASTはソースコードを構文解析した結果をツリー構造にしたもので、AST Explorerを使うと簡単に見ることができます。 ({}) + "" のAST ({}) + "" のASTをみると、ひとつの ExpressionStatement となっているのがわかります。ExpressionStatement の leftは ObjectExpression 、 operator は + 、rightは Literal となっていて、たしかに Object と String の足し算になっています。これなら確かに"[object Object]" が返ってくるでしょう。 {} + ""のAST しかし、{} + "" のASTをみると、Bloc

    JavaScriptでObjectに空のStringを足すと0になる!?……わけではなかった
    rryu
    rryu 2024/01/24
    BlockStatementは文末にセミコロンのいらない文なので何事もなく文が終わり2つの文として解釈されているということなのか。オブジェクトの中身に見えるものがラベル付き文なのがおもしろい。
  • Fetch APIは「PATCH」だけ大文字と小文字の挙動が異なる

    const url = "https://fetch-api-normalization.deno.dev"; await fetch(url, { method: "PATCH" }); await fetch(url, { method: "patch" }); 実行すると、次のようなエラーを得るはずです。 PATCH を小文字で書いた際のエラーの一例 さて、どのような条件でこのエラーが発生するのでしょうか?これが意図されたものなのだとしたら、 GET や POST は大文字・小文字を無視してよくて PATCH は無視できない理由がなにかあるのでしょうか?以下でその理由を探ってみましょう。 いつエラーが発生するか このエラーは、 Fetch API を利用して外部の HTTP サーバーに対してリクエストを行う時に、 PATCH と書くべきところを patch と書いていると発生します。

    Fetch APIは「PATCH」だけ大文字と小文字の挙動が異なる
    rryu
    rryu 2023/10/07
    XHRを含む既存の全てのfetch動作をFetch Standardとしてまとめて、それに準拠した形でFetch APIを作ったので妙な互換仕様があるということらしい。HTML Standardも同じ感じだな。
  • JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog

    Webアプリケーションでは、DOMの要素にイベントリスナ(イベントハンドラ)を取り付けることで、ユーザーによる様々な操作 (クリックなど) に応じて処理を行うことができます。 しかし、イベントリスナを登録しても、他のイベントリスナとの干渉によって意図した通りに発火しないことがあります。ここではその調査方法を紹介します。 前提知識: イベントバブリングイベントについては筆者の過去記事でも解説しましたが、あらためてここでも説明します。イベントバブリングを理解することが、イベントデバッグの近道だからです。 DOMにおいて、要素はネストすることによって木構造を形成します。ある要素(ターゲット要素)がクリックされるなどしてイベントが発生したとき、イベントはその要素自体だけではなく、その祖先要素にも送られます。これをイベントバブリングといいます。 イベントバブリングは2つの段階に分けられます。 Cap

    JavaScript: 所望のイベントリスナの発火を妨げているイベントリスナを特定する | Wantedly Engineer Blog
    rryu
    rryu 2023/07/27
    誰かがstopPropagation()していてイベントバブリングが止められる問題の調査方法。これは確かにめんどくさい問題…
  • Ajaxから始まった一つの時代の終わり

    最近の流れを見ていての感想文なので、ideaとして投稿します。筆者のバックグラウンドとしては、Remixの商業記事を書いたり、App Routerの商業記事を書いたりしている人です。 さて、筆者は2022年の秋から、社内システムではありますがRemixをプロダクション運用しています。また、Next.jsのApp Routerについても、パラダイムとしてはRemixにインスパイアされた部分が多い[1]おかげで、順調にキャッチアップできています。 RemixとApp Routerは、ルーティングとデータフェッチを高度に統合しており、Progressively Enhanced SPA(PESPA)と呼ばれることもあるそうです。PESPAについては、次の記事が話題になりましたね。 このPESPAであるRemixを実運用する中で、フレームワークの手触りが近年触ってきたものと大きく違っている点があっ

    Ajaxから始まった一つの時代の終わり
    rryu
    rryu 2023/07/14
    どちらかというともうフロントエンドで全部やるからバックエンドは簡易で汎用的なAPIだけ用意しなとフロントエンドがいきっていた時代が終わったという感じなような。
  • [javascript] なぜ「forEachでasync/awaitは使えない」と言われるのか - Qiita

    async function testAsync(v) { await new Promise(resolve => { setTimeout(resolve, 100); }); return v + 1; } const data = []; const params = [0, 1, 2]; params.forEach(async v => { const res = await testAsync(v); console.log(res); data.push(res); }); console.log(data); // [] 1 2 3 彼としてはawaitによって非同期処理の完了を待ち、結果をdata配列に挿入していき、最終的にdata配列が[1, 2, 3]となる想定だったようですが、実際には空配列になっています。 これを見て「うんそれはそうなるよね・・・」と思いはしたの

    [javascript] なぜ「forEachでasync/awaitは使えない」と言われるのか - Qiita
    rryu
    rryu 2023/01/05
    forEach()に渡しているasync v()をawaitしている人がいないってだけなのだが、そもそもここにasyncを指定する必要はないように思う。
  • 【JavaScript】数千行のコードを数行にしてしまう Proxy の魔力 - Qiita

    こんにちは。ぬこすけです。 最近(2022/10/20)に、ゆめみさんがクイズを出しました。 ゆめみさんの記事を読むと、 Proxy というオブジェクトが出てきました。 記事のタイトル通り「代入したのに、代入されない」、摩訶不思議なオブジェクトです。 Proxy って一体何者なんでしょうか? ゆめみさんのクイズの例では やめ太郎さんがたかしに改名するのを断固拒否する 例ですが、 実は Proxy には 数千行のコードを数行にしてしまう魔力 も持っているのです。 今回は JavaScript の Proxy について魔力についてご紹介したいと思います。 来、 Proxy は難しい内容ですが、 setTimeout の時と同じく、 できるだけ初心者の方にもわかりやすく説明していきたいと思います。 Proxy って何? 簡単にいえば、 オブジェクトを魔改造できる ものです。 ゆめみさんの記事の

    【JavaScript】数千行のコードを数行にしてしまう Proxy の魔力 - Qiita
    rryu
    rryu 2022/11/02
    この例だと型チェックや補完が効く訳でも無いので「myClient.fetch('GetApiArticles')」とさして違いがないという。
  • JavaScriptの生みの親「自動セミコロン挿入やめときゃよかった……」 - Qiita

    末尾セミコロンはしばしば宗教戦争になりますね。 Qiitaでもその他のSNS等でも、そのようなバトルはいくらでも見つかります。 しかし意外にも、この戦争の原因を大まで辿ってる人はほとんど見当たりません。 見つけたものではこの人(と、この記事を参照している記事)くらいでした。 以下は、JavaScriptの末尾セミコロンについて、JavaScriptの生みの親であるBrendan Eichによる見解、The infernal semicolonの紹介です。 なお2012年の記事なので、存在しないリンクや古くなった知見が含まれる可能性があります。 The infernal semicolon このツリーのコメントを見るたびに、私は悲しみに包まれます。 問題のコード、 このコードは自動セミコロン挿入(ASI)に依存しているため、ミニファイを行うためには、ASIを含めた完全なパースを行い、cle

    JavaScriptの生みの親「自動セミコロン挿入やめときゃよかった……」 - Qiita
    rryu
    rryu 2022/08/17
    「ASIは構文エラーを修正する手続きにしかすぎません。」 セミコロンが無いというエラーを出すならそっちでにセミコロンを補ってくれというのを実現してみたら、誰も感謝せず混乱しか生まなかったという…
  • JavaScriptにセミコロンは入れるのか?入れないのか? - Qiita

    結論 どちらでもいい セミコロン付けても付けなくても落とし穴はある ESLintを利用することで落とし穴を検知できる 私はセミコロンつけない派 自動セミコロン挿入とは 自動セミコロン挿入(automatic semicolon insertion) この仕組みのおかげでセミコロンを使わなくてもコードを書くことができ、コンパイラが行末を察してセミコロンを挿入してくれる 自動セミコロン挿入のしくみはECMAScriptで規定されており、自動セミコロン挿入はJavaScriptエンジン間で可搬性がある 自動セミコロン挿入には落とし穴があり、ルールを理解しておく必要がある 第1のルール:セミコロンが挿入されるのは、"}"トークンの前か、改行の後か、プログラムの末尾だけ

    JavaScriptにセミコロンは入れるのか?入れないのか? - Qiita
    rryu
    rryu 2022/08/15
    セミコロン入れない派はセミコロンを入れないと誤認識されるパターンに対してセミコロンを入れるのだろうか。それとも無くてもいい形に変形するのだろうか。
  • ユーザースクリプトが書きにくくなると初学者が自由に練習できる場が減っていきそう - hitode909の日記

    DTMをどうやって始めるかというと、テレビとかで流れてる曲を耳コピで打ち込んで匿名掲示板に放流する、するとボコボコに叩かれる、それを糧に成長していくかただちに脱落していく、そういう流れがあったのだけど、近年はJASRACが手作りMIDIに対する集金を始めたそうで、雑MIDIを公開すると著作権料を徴収されてしまう、これでは初学者が耳コピからDTMを始めるルートが閉ざされてしまっているのでは、という話が20年前くらいにはあった。 Greasemonkeyとかユーザースクリプトとかも同様な雰囲気があると思って、おおらかな時代は乱雑なコードを書いて好きに動かしていた。 blog.sushi.money blog.sushi.money 現代のChromeは.user.jsをブラウザにドロップしてもすんなり動かしてくれなくて、雑なJSを書いて動かしたい、という衝動をかなえるための参入障壁が上がってい

    ユーザースクリプトが書きにくくなると初学者が自由に練習できる場が減っていきそう - hitode909の日記
    rryu
    rryu 2022/06/23
    他人のサイトのDOMをいじるようなことを初学者はやらないと思うというか、もはや商用100V電源で遊んでみます的な危うさがある行為だと思う。
  • たった256文字のJavaScriptコードで描かれた街の風景アニメがスゴ過ぎて訳がわからない/解説ページを見てもわからないorz【やじうまの杜】

    たった256文字のJavaScriptコードで描かれた街の風景アニメがスゴ過ぎて訳がわからない/解説ページを見てもわからないorz【やじうまの杜】
    rryu
    rryu 2022/06/01
    fillRectしかしていないのに描いている色が変わる理由がわからない。
  • JavaScriptの上限・限界値 - Qiita

    JavaScriptの文字列や配列は最長でどこまで格納できるか、気にしたことはありますか?関数は何個まで引数を取れるのでしょうか?ブロックのネストは何段まで? この記事では、そんな素朴な疑問に答えてみます。 テストに使った環境は、 macOS 12.3.1 (Arm64) Node.js v17.7.2 Firefox Nightly 102.0a1 (2022-05-29) です。当たり前ですが、この記事に載せる数値は環境によって変わる可能性があります。 テストに使ったスクリプト類は https://github.com/minoki/javascript-limits に置いてあります。 文字列の長さ まずは文字列の長さです。 規格には The String type is the set of all ordered sequences of zero or more 16-bit

    JavaScriptの上限・限界値 - Qiita
    rryu
    rryu 2022/05/31
    文字列の実装上の上限が意外と短い。おそらく32ビットからフラグ等を差し引いた分が上限になっているのだと思うが…
  • JavaScriptを大きく変えうる Dataflow Proposals の概要と論点(Call-this, Pipe Operator)

    Dataflow Proposals とは 以下の5つのプロポーザルをまとめて Dataflow Proposals と呼んでいる。 Stage 2: Pipe operator Stage 1: Call-this operator Stage 1: Partial application(PFA) Stage 1: Extensions Stage 0: Function.pipe and flow 例えば Pipe operator, Call-this operator, Partial application を組み合わせると、以下のように書けるようになる。(提案段階なので変わる可能性アリ) import { getAuth, getIdToken } from "firebase/auth"; function isPublic(article) { return articl

    JavaScriptを大きく変えうる Dataflow Proposals の概要と論点(Call-this, Pipe Operator)
    rryu
    rryu 2022/05/05
    Call-this operatorがFunction.prototype.callというバッドノウハウを正当化するためにtree-shakingや拡張メソッドを持ち出している感があってアレな感じ。
  • Re: 僕らを縛る Node.js という呪いについて - あるいはなぜ TypeScript 以外が真っ当な選択肢にならなかったか

    Re: 僕らを縛る Node.js という呪いについて - あるいはなぜ TypeScript 以外が真っ当な選択肢にならなかったか https://d.potato4d.me/entry/20220405-nodejs/ へのアンサーソング。 プログラミング言語としての JavaScript の話をする。 2010年頃、Python 2 でプログラミングを学習した自分にとっては Node.js + CoffeeScript が Better Python だった。 CoffeeScript は当時の JS(ES3~5) に足りない機能を補ってくれて、Python と同じく空白制御のオフサイドルールなのが気に入った。見た目が少しだけ Ruby っぽいので当時全盛だった Rails の人間に訴求するにも有利だった。 Node.js のモジュールシステムである Commonjs は Pytho

    Re: 僕らを縛る Node.js という呪いについて - あるいはなぜ TypeScript 以外が真っ当な選択肢にならなかったか
    rryu
    rryu 2022/04/09
    ビルドシステムまだ安定してないのか。コードを書いてブラウザで確認するだけという開発者体験の実現とブラウザがESモジュールに対応したという前提条件の変化によるものっぽいが…
  • Node.js の原罪 - from scratch

    Intro ちょうどタコピーの原罪が流行ってるのでこのタイトルにしたけど結構気に入ってる。 d.potato4d.me この話を読んでの感想とここまで大きくなった Node.js の振り返りをしようと思う。 どんなプログラミング言語であってもみんなから使ってもらって開発者をハッピーにしたいと思ってる。ただ最初は良かったと思ってた機能がなんか古臭くなったり、他にクールな機能を持ったものが登場したことによって徐々に飽きられていき、最終的に他の言語に乗り換えられる。 まぁどんな言語も同じだと思う。C言語だって生まれた当初はすごくクールでみんなをハッピーにしてた。今丁度「戦うプログラマー」を読んでるが、C++が出てきて、周りのエンジニアC++ を使おうとするシーンが出てくる。そこで、「あんなの使って何が良いんだ、Cで十分だろ」とWindows NT 開発リーダーのデーブカトラーが言ってたりする

    Node.js の原罪 - from scratch
    rryu
    rryu 2022/04/08
    原罪的にはJavaScriptでサーバサイドを実装しようと思ったというところで、そのおかげで今も生きているし、そのせいで今も苦労しているという感じ。
  • JavaScript で parseInt / parseFloat を使わない方が良い理由

    となるのが原因です。parseInt というのは、文字列を解析して整数値(int)を返すグローバル関数であり、引数をまず文字列に変換する仕様となっております。その段階で 0.0000005 が "5e-7" という文字列に変換されてしまい、その文字列の先頭の 5 だけが数字として解析されてしまったため、結果として parseInt(0.0000005) === 5 となりました。 なぜ String(0.000005) === "0.000005" に、String(0.0000005) === "5e-7" になるのかについては、この記事の最後で余談として説明します。 整数化には Math.trunc を使おう このように、parseInt は文字列を引数にすることを前提にしているため、速度の面でも可読性の面でも「小数値を整数値に変換したい」という場合に使うのは望ましくありません。最も望

    rryu
    rryu 2022/02/04
    Number()は正しくないフォーマットに対してはNaNを返すというところがマシな挙動ではあるが、そもそも型の異なる値やフォーマットが不明な値を渡したりする使い方が不適切なのだと思う。
  • colorsなどのnpmパッケージに悪意あるコードが含まれている問題について

    追記: 2022年1月11日 2:29 JSTにDoS脆弱性としてセキュリティアドバイザーが出されて、悪意あるバージョン(1.4.1や1.4.2)はnpmからunpublishされ、npmの最新は安全なバージョンである1.4.0へと変更されました。 Infinite loop causing Denial of Service in colors · GHSA-5rqg-jm4f-cqx7 · GitHub Advisory Database 2022-01-08 に colors というnpmパッケージにDoS攻撃のコードが含まれたバージョンが1.4.44-liberty-2として公開されました。 GitHub: https://github.com/Marak/colors.js npm: https://www.npmjs.com/package/colors 問題についてのIssu

    colorsなどのnpmパッケージに悪意あるコードが含まれている問題について
    rryu
    rryu 2022/01/11
    ここ数年活動してなかった作者が突如masterに謎のコミットをしてリリースし、現在アクティブな開発者が対応しているという状況らしい。
  • 【JavaScript】実数から整数への変換に parseInt() を使ってはいけない2つの理由🙅‍♀️ - Qiita

    背景(誰のための記事?) JavaScriptプログラマのみなさまこんにちは。 最近のお仕事の傾向として、マイクロサービス化といいいますか、オブジェクト指向の延長といいますか、MVVM化といいますか、下回りは速度&効率重視でC++で構築し、中間は保守(メンテ)&書きやすさ+ちょっぴり速度も重視で node.js(JavaScript)、上層のUIはなるべく広範囲で使えるように考慮して HTMLCSS 、という3層構造 ・上層:HTML + CSS ・中層:node.js(JavaScript) ・下層:C++ が流行っていまして、今回の事件は中層の node.js スクリプトの部分で発生した問題でした。しかも、下層で生成された巨大なデータを中層で処理し、上層で表示しようとするとある条件で遅延が発生し、表示がカクつくという問題で、その「ある条件」が長期間に渡って特定できない、、、といった難

    【JavaScript】実数から整数への変換に parseInt() を使ってはいけない2つの理由🙅‍♀️ - Qiita
    rryu
    rryu 2022/01/09
    JSはゼロ方向への丸めがIEで使えないMath.trunc()しかなくてそれでperseInt()が無難という判断だと思うのだが、ビット演算すると整数になるという方がまだ無難な感じがする。