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

既に Stage 4 になっているので諦めていたんですが、流石に見逃せないかなと思ったので TC39 の Discourse にトピックをたててみました。意見がある方はこちらにお願いします。 https://es.discourse.group/t/fix-at/983 議論に伴って私が実際に欲しかったものをモジュールにして公開してみました。 https://github.com/petamoriken/safe-at それといまいちユーザーからの声が伝わっていない感じがしたのでハッシュタグ #fix_ecmascript_at を用意してみました。協力をよろしくおねがいします。 String#char{At, CodeAt} という存在を忘れてたんですが、この似た名前のメソッドたちが引数を整数に丸めるのに String#at が丸めないのはたしかに変だということに気づいてしまったので、自
タイトルにあるように、文字列が半角英小文字・大文字と半角数字を全て含むかどうかを判定するという機会は少なくありません。特に、文字種の多さがパスワードの強さであるという教義の持ち主である場合に顕著です。もちろん長さは16文字以内です。 さて、この判定は一見単純に見えて一筋縄ではいきません。文字列の条件判定といえば正規表現ですが、「全て含む」という条件をきれいに書くのは少し難しいでしょう。そこで、この記事ではこの条件を判定する諸方法について雑に考察します。 愚直に正規表現を使う方法 正規表現では、「ある文字種をひとつ含む」という条件を書くのは簡単です。例えば半角小文字を含むという文字列は/[a-z]/という正規表現で判定可能です。これを用いれば、正規表現を3回使うことで上述の条件を判定できます。 const ratz = /[a-z]/, rAtZ = /[A-Z]/, r0t9 = /[0-
ある日の弊社 社長「お〜い、やめ太郎」 ワイ「なんでっか、社長?」 社長「今度作るショッピングサイトの件なんやけど」 社長「ドラッグ&ドロップ機能を実装することになったから」 社長「それをやめ太郎にお願いしたいんや」 社長「やめ太郎、やったことあるか?」 ワイ「どどどドラッグ!?」 ワイ「あるわけないやないですか・・・!」 ワイ「そんなもの販売して万が一・・・」 ハスケル子「やめ太郎さん、違いますよ」 ハスケル子「ドラッグ&ドロップでしょ」 ハスケル子「マウスで掴んで移動させるやつです」 ワイ「ああ、そっちか」 社長「やめ太郎、できるか?」 ワイ「もちろんですわ」 ワイ「前職でもドラッグやってましたから、余裕ですわ」 社長「よ、よろしく頼むわ」 レッツJavaScript ワイ「確かドラッグ&ドロップを実装するときは」 ワイ「マウスを動かしたときにマウスポインタの座標を取得できるようにして
イテレータは今となっては多くのプログラミング言語に存在する概念で、繰り返し処理やループ、ストリームといった対象を抽象化してくれるものです。JavaScriptにはES2015でイテレータが追加されており、JavaScriptを触っている方にとっては既に馴染み深いものとなっています。 とはいえ、JavaScriptのイテレータにはひとつ問題点がありました。それは「イテレータを直接変換・操作できるメソッドが存在しない」という点です。従来イテレータが持つメソッドはイテレータから一つ値を取り出すnextメソッドのみであり1、それ以上の機能は何も提供されていませんでした。これにより、Rustなどのイテレータが強い言語に比べてJavaScriptのイテレータは有用性が大幅に低いものとなっていました。 この記事では、この問題を多少解消するプロポーザル「Iterator Helpers」を紹介します。これ
はじめに 正規表現を使ったソースの修正をしているときにexec()やmatch()の実行結果に見慣れないプロパティgroupsを見つけました。 いつの間にかJavaScriptにも名前付きグループが実装されていたようです。 そこで軽く調べてみましたら、それ以外にもES2018において色々と追加されていたようです。 何番煎じか分かりませんが、この記事では、簡単にES2018の正規表現に関する新機能の動作を検証してみたいと思います。 厳密な定義等は、ほかの記事等を見てください。 正規表現の新機能 Named Capture Groups 従来は、 (pattern) のようにpatternにマッチしたキャプチャにアクセスするには、$1などキャプチャが現れた順番に対応する数値でしかアクセスできませんでした。 ES2018以降では、 (?<name>pattern) と書くとキャプチャに名前$<n
この記事について この記事は「JavaScriptの概念たち (前編)」の続きです。本来は1つの記事なのですが、あまりにも長くなりすぎたので分割しました。 17. Prototype Chain JavaScriptには2つの特徴があります。1つは「全てがオブジェクト」でもう1つは「prototypeベースの言語だということ」です。 const hoge = { a: "hogehoge" }; console.log(hoge instanceof Object); // -> true const fuga = [1, 2, 3]; console.log(fuga instanceof Object); // -> true const piyo = new Map([[1, 'one'], [2, 'two']]); console.log(piyo instanceof Obje
皆さんこんにちは。今回の記事ではJavaScriptの等値比較について見ていこうと思います。 「どうせ==と===の違いとかだろ? 今さらそんな記事書くなよバーカw」と思った人はぜひ期待せずに読み進めてみてください。 「じゃあObject.isでしょ? 知ってる知ってる、使ったことないけど」と思った人はまあ読まなくても大丈夫です。 さて、等値比較というのは、2つの値が等しいかどうか判定することです。JavaScriptにおいて等値比較はどのように行うのか、そしてどのような場面で等値比較が発生するのかをこの記事では余すことなく紹介します。 以降、この記事で仕様書という場合はECMAScript® 2018 Language Specificationを指すものとします。 ==と=== とはいえ、まずは==と===の話をしないことには始まりません。==はJavaScript初心者がとりあえず習
console.log(["foo", "bar"] == "foo,bar"); // true console.log([""] == 0); // true console.log((123 ^ {}) === 123); // true const obj1 = ["😂"]; const obj2 = ["😂"]; console.log(obj1 == "😂", "😂" == obj2); // true true console.log(obj1 == obj2); // false このような挙動は面白いので、Twitterとかで誰かが話題にするたびに多少は話題になります。しかしいい加減飽きたので、皆さんにはこんなの常識として理解しておいていちいち騒がないでいただきたく、この記事を用意しました。 この記事では、JavaScriptにおけるプリミティブ変換に関する仕様を
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く