タグ

JavaScriptとjavascriptに関するrryuのブックマーク (235)

  • 【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()が無難という判断だと思うのだが、ビット演算すると整数になるという方がまだ無難な感じがする。
  • ソフトウェア開発の進歩完全に止まったような気がする

    (ゲームの話は一切知らん) いつのまにか「Webフロントエンドの動きが速い」とか誰も言わなくなってることにふと気付いた。なんというかソフトウェアをどう作るか、という問題にたいして大枠の部分では完全に固まってしまって、あとは個別の事情をどうやっていくかみたいな話しか残ってないように見える。 端的にいえば、宣言的UIkubernetesは聖杯だったのではないかな。 k8sにかんしては「Cloud Runみたいのでいいじゃん」みたいな話はあると思うんだけど、Envoyほしいとかなってくると結局事実上k8s必須だし、今新しくアプリ作るときに宣言的UIじゃないフレームワーク使うこととかほぼ考えられんよな。で、こういう構成が定番ですね、みたいになってなんかもう数年は経つ気がする。結果として日語でソフトウェア開発の話になるとチームビルディングがどうのみたいな話しかなくなってきていて、なんかつまんねー

    ソフトウェア開発の進歩完全に止まったような気がする
    rryu
    rryu 2021/11/26
    あの頃のJS界隈は皆で同じようなものを作りあっていたという戦国時代だっただけでめざましく進捗していたという訳ではなかったと思う。
  • Webフロントエンド開発(2021)の見取り図をつくりたい

    業はiOS開発なのですが、6月頃から個人開発でWebフロントを触っています。 Webフロントに入門するときに、開発の前提知識・専門用語が多すぎて、脳が処理しきれない状態になりました。 これでも数年前のより混沌としてた時期よりは安定してきているように思うんですが、それでもやはりカオス感は否めませんでした。 Webフロントエンド開発の見取り図があればいいのにと思ったので、自分でちょっとつくってみようと思いました。 個別の技術要素の情報は豊富にある(ありすぎると言ってもいいかもしれません)んですが、全体像がよくわからないので、 たとえば「TypeScriptで開発した方がいいのか?」とか、「Babelとかwebpackってインストールしなきゃいけないの?」とか、 そういう素朴な疑問が学習進めて行っても、なかなか解消できなかったので、いい感じのざっくり感でまとめられたらと思います。 この記事で全

    Webフロントエンド開発(2021)の見取り図をつくりたい
    rryu
    rryu 2021/10/28
    AltJSはもう死語な感じがするのだがどうなのだろう。
  • JavaScript クイズ解説: NaN === NaN の結果はどうなる?

    先日、このようなツイートを書きました。 久しぶりの JavaScript クイズ。 JavaScript において NaN === NaN の結果は次のうちどれになるでしょうか? — Takuo Kihira (@tkihira) September 7, 2021 答えは 4 の「状況によって上記以外もありうる」です。でも、2 や 3 を選んだ方も、もはや正解だといって差し支えないと思います。 解説が長くなったので、ブログ記事にまとめました。 そもそも NaN とは NaN は “Not a Number” を意味する数値です。数値なのに「Not a Number」というのは違和感があるかもしれませんが、数値表現することが出来ない状態を保持するために便宜的に用意された数値、というようなものです。 NaN は、浮動小数点演算において数値では表現出来ない計算をしようとすると登場します。例えば

    rryu
    rryu 2021/09/09
    「NaNはキーワードではなくグローバル変数だ」「え?」「だが安心して欲しい。上書き禁止にしてある」「よかった…」「ただしスコープでオーバーライドする方法は存在する」「なん…だと…」
  • JavaScriptはなぜシングルスレッドでも非同期処理ができるのか/Why Can JavaSctipt Invoke Asynchronous in Single Thread?

    JavaScriptはシングルスレッドであることが知られています。そして、Promiseを用いた非同期処理ができることは周知の事実です。では、なぜシングルスレッドで非同期処理ができるのでしょうか? その点について、非同期処理のための2種類のQueuesについて触れつつ、コードベースでの説明も行います。

    JavaScriptはなぜシングルスレッドでも非同期処理ができるのか/Why Can JavaSctipt Invoke Asynchronous in Single Thread?
    rryu
    rryu 2021/09/08
    イベントループはタスクの実行が終わった後に戻ってくる場所で、トップレベルのコードもタスクとして実行されているはずなので解釈がちょっと違うように思う。
  • アクセシブルじゃないクリックイベントを発見する

    (() => { "use strict"; const elements = Array.from(document.querySelectorAll("*")); const clickEvents = elements .map((element) => { const listeners = getEventListeners(element); const clickListeners = listeners.click || []; clickListeners.forEach((event) => (event.owner = element)); return clickListeners; }) .flat(); for (const event of clickEvents) { if (event.owner.matches("button, a[href]")) {

    アクセシブルじゃないクリックイベントを発見する
    rryu
    rryu 2021/05/23
    clickイベントハンドラが付いているaとbutton以外の要素を探すスクリプト。
  • 認証用トークン保存先の第4選択肢としての「Auth0」 | ログミーBusiness

    iCARE Developer Meetupは、月次で開催している株式会社iCAREが主催するエンジニア向けのLT勉強会です。18回目の今回は、Ruby on Railsをテーマに行いました。サーバーサイドエンジニアの越川氏からはToken認証機能について。 Rails APIモードで開発するときの認証用のトークンはどこに保存すればいいの問題越川佳祐氏:私からは、「Rails APIモードにおけるToken認証機能について」というテーマでLT(ライトニングトーク)をしようと思っていたんですが、スライドを作っていて「あれ、これ別にRailsだけの話じゃなくない?」と思ってしまいました。みなさんの中にも、そう思う方がいるかもしれないんですが、もうこれで作っちゃったのでご了承ください。 私は株式会社iCAREで、サーバーサイドエンジニアをしている、越川と申します。Twitterは@kossy07

    認証用トークン保存先の第4選択肢としての「Auth0」 | ログミーBusiness
    rryu
    rryu 2021/05/23
    Auth0はAuth0側がセッションを持っていてクッキーでセッションIDを保持するので安全性はクッキー方式と変わらないのだった。
  • JavaScript で print デバッグ時に変数名を出力する - mizdra's blog

    数列の和を求めるプログラムを作成することになり、意気揚々と以下のようなプログラムを書いたという状況を想像して下さい。 function sum(nums, acc = 0) { if (nums.length === 0) return 0; if (nums.length === 1) return nums[0]; return sum(nums.slice(1), acc + nums[0]); } const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; console.log(sum(nums)); // expected: 55 一見すると何も問題なさそうに見えるプログラムですが、実はバグがあります (皆さん分かりますか?) *1。実際に上記プログラムを実行すると 55 ではなく 10 が出力されます。 こうした場面に遭遇すると、自然と sum

    JavaScript で print デバッグ時に変数名を出力する - mizdra's blog
    rryu
    rryu 2021/05/04
    さすがのChromeも開発者ツールの為に変数名を値として扱える拡張はしないだろうと思ったら標準で大体同じことができるものがあったという。
  • JavaScriptで任意のHTML要素をPicture-in-Pictureする

    みなさんはPicture-in-Picture(PiP)という機能を使ったことがありますか。PiPは動画コンテンツなどを浮遊する小窓に表示する機能です。小窓はウィンドウの外側を自由に移動できます。 デスクトップが賑やかになりがちなPCでもPiPは大活躍なのですが、特にスマートフォンにおいては数少ない「ウィンドウ」機能になります。Androidはもちろん、iOS14も対応したことで話題になりました。 これによってスマホ一台あれば、ソシャゲの公式生放送を見ながらソシャゲのイベントを周回する地獄のような行為が可能になりました。 利用者という視点から見ると非常に便利なのですが、開発者から見ると動画しか表示できないのはなかなか使い所が難しくなります。そこで、この機能を使って好きな情報を表示できないか実験してみました。 PiP機能の対応環境 Chrome 70 Firefox 71(制限付き) mac

    JavaScriptで任意のHTML要素をPicture-in-Pictureする
    rryu
    rryu 2021/04/30
    PiPは動画しかできないはずではと思ったらDOMをSVGのforeignObject経由で画像化してcaptureStreamしているキャンバスに描画するという力技だった。
  • JavaScript 長いループ 分割 - hitode909の日記

    ブラウザで長いループや、重い処理をともなうループを回したいとき、同期的にJavaScriptを実行するとメインスレッドがブロックしてしまうので、ちょっとずつ細切れに分割して実行したい、ということがある。 昨日久しぶりに書いたら新たなパターンと出会ったので、これまでにどう書いてて今回どうなったかメモ。 setTimeoutする 以前(10年前とか)はこんなのをよく書いていた。 itemsがでかいArrayで、console.logがすごく重い処理だとして読んでください。 function iterateHeavyTask(items) { const startAt = new Date(); while (items.length > 0 && new Date().getTime() - startAt < 10) { console.log(items.shift()); } if (

    JavaScript 長いループ 分割 - hitode909の日記
  • セミコロンをつけ忘れただけなのに...【JavaScript】 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    セミコロンをつけ忘れただけなのに...【JavaScript】 - Qiita
    rryu
    rryu 2020/07/31
    自動セミコロン挿入によって文法的に正しくなっても意味的に正しくなるとは限らないと。
  • なぜJavaScriptのDateコンストラクタは例外を投げないのか - Qiita

    Q. なぜJavaScriptのDateコンストラクタは例外を投げないのか? A. NaNがあるから DateはJavaScriptで日時を扱うためのAPIで、JavaScriptの当初から存在します。 Dateオブジェクトは主にDateコンストラクタを用いて作られます。Dateコンストラクタにはいろいろな機能があり、new Date()のように引数なしで呼び出すと現在時刻を取得できるほか、new Date("2020-04-24T00:00+09:00")のように文字列から日時に変換したり、new Date(1587654000000)のように数値(UNIX時間)を日時に変換したりすることができます。 一般に、データの変換作業には失敗が付き物です。しかし、new Dateは決して失敗しません1。例えば、new Date("foobar")のように明らかに日時を表していない文字列からDat

    なぜJavaScriptのDateコンストラクタは例外を投げないのか - Qiita
    rryu
    rryu 2020/04/26
    初期のJSはNot a numberを数値でないもの全般に使っていてperseInt()が変換できない時にNaNを返してくるとか「え?」って思うものがある。
  • 4歳娘「パパ、constしか使わないで?」 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    4歳娘「パパ、constしか使わないで?」 - Qiita
    rryu
    rryu 2020/04/23
    これは三項演算子拒否教 VS const厨という地獄が発生しているだけなのでは…
  • core-jsがメンテされていない理由→プロジェクトは継続する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? core-jsとは core-jsをみなさんご存知だろうか。直接は知らなくてもbabelでpolyfillを当てているなら間接的にお世話になっているはずだ。 メンテされない そのcore-jsは当分メンテされないらしい。というか2020/01/14を最後にパタッと活動が途絶えている。 なんとこの巨大projectはzloirockというたった一人によってメンテされてきた。 ここで彼のコメントをいくつか引っ張っておこう。 https://github.com/zloirock/core-js/issues/548#issuecomment

    core-jsがメンテされていない理由→プロジェクトは継続する - Qiita
    rryu
    rryu 2020/03/23
    babelが自前のポリフィルをやめてcore-jsを使うようになったが、core-jsの作者が交通事故で収監されてメンテが止まるという。
  • JavaScriptを読んでいてたまに出てくる唐突な二つの括弧の意味

    お世話になります、他人が作ったJavaScriptを見ていると 唐突に謎の書き方が出てきますが言語化が難しく調べるのが難しいものがあります その一つが以下のソースなのですが TextEditor.prototype.createElements = function () { this.TEXTAREA = document.createElement('TEXTAREA'); this.TEXTAREA.tabIndex = -1; (0, _element.addClass)(this.TEXTAREA, 'handsontableInput'); this.textareaStyle = this.TEXTAREA.style; this.textareaStyle.width = 0; this.textareaStyle.height = 0; this.TEXTAREA_PAR

    JavaScriptを読んでいてたまに出てくる唐突な二つの括弧の意味
    rryu
    rryu 2020/03/04
    カンマ演算子かなと思ったらカンマ演算子だった。プロパティに入った関数をメソッド呼び出しではなく関数呼び出ししようとすると一時変数が必要になるが、カンマ演算子を使うとそれが不要になると。
  • すっきり書きたい JavaScriptの条件分岐 - Qiita

    (※追記 2020/2/19 コメントのご指摘をもとに、記事を修正しました) はじめに 未経験からNode.jsの現場に配属された2019年新卒エンジニアが、学習の振り返りとしてJavaScriptの基礎の基礎をまとめます。 過去のJavaScript基礎シリーズ↓ JavaScriptでvarが推奨されない理由を整理してみた 今回は、多くの書き方が存在するJavaScriptの条件分岐に関して、よりすっきりとした書き方を考えていきます。 Goal 思考停止のelseやswitchから離れる 可読性やリファクタリングのしやすさの観点から、JavaScriptの条件分岐を使いこなす まず「すっきり」を定義する 記事で目指したい「すっきり」を、以下のように定義します。 コードの可読性が高いこと バグが生まれにくいこと 後からリファクタリングがしやすいこと コードの可読性が高いこと プロジェク

    すっきり書きたい JavaScriptの条件分岐 - Qiita
    rryu
    rryu 2020/02/13
    switch文は要は探索でC言語などだとジャンプテーブルに最適化される可能性があったが、JSならswitch文使うくらいなら探索に適したデータを用意して探索してしまった方がいいと思う。
  • 20 年代のフロントエンド.md

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    20 年代のフロントエンド.md
    rryu
    rryu 2020/01/30
    とりあえずVanilla JSとか生DOMとかは完全に死に絶えた感はある。
  • JavaScriptの ~. 構文って知ってる? Promise Pipeliningが拓く非同期処理の未来 - Qiita

    JavaScriptの ~. 構文って知ってる? Promise Pipeliningが拓く非同期処理の未来JavaScriptECMAScript PromiseはES2015からJavaScriptに導入された機能で、非同期処理をいい感じに記述できるたいへんありがたいオブジェクトです。実は、Promiseの強化版ともいえる新機能、その名もHandledPromiseが提案されています。また、このHandledPromiseのための新構文~.も同時に提案されています。 例えば、~.を用いて次のようなプログラムを書くことができます。 この記事では、HandledPromiseと~.について概説します。例によって、これらはStage 1プロポーザルです。つまり、「こういうのがあってもいいんじゃない?」と思われている段階であり、具体的な方向性とかは何一つ決まっていないということです。この記事で

    JavaScriptの ~. 構文って知ってる? Promise Pipeliningが拓く非同期処理の未来 - Qiita
    rryu
    rryu 2020/01/06
    パイプラインの機能とプロキシオブジェクトの機能が混ざって絶妙に分かりづらい気がする。
  • Objectのプロパティ名に変数を設定する方法 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    Objectのプロパティ名に変数を設定する方法 - Qiita
    rryu
    rryu 2019/12/26
    ES6のComputedPropertyName
  • そろそろJavaScriptに採用されそうなOptional Chainingを今さら徹底解説 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? みなさん、Optional Chaining使ってますか? 私は先日出たTypeScript 3.7 Betaを小さいプロジェクトに導入して使ってみました。これはとても快適ですね。 例によって、Optional ChainingはECMAScriptに対するプロポーザルの一つです。つまり、もうすぐ入りそうなJavaScriptの新機能です。プロポーザルはたくさんの種類がありますが、その中でもOptional Chainingはその高い有用性からこれまで多くの注目を集めてきました。Optional Chainingは2019年6月のTC3

    そろそろJavaScriptに採用されそうなOptional Chainingを今さら徹底解説 - Qiita
    rryu
    rryu 2019/10/21
    構文的に無いと整合性が取れなくなるので定義はするが使われ方が思いつかないのでとりあえずエラーにするというのはおもしろい。