- 1. this
- 2. bind()
- 2.1. Warning: React has detected a change in the order of Hooks called by X でハマる
- 2.2. Webページの配色をユーザーが選択するJavaScript
- 2.3. Denoは全てのコードをstrict modeで実行する
- 2.4. ワイ「Node.jsってなんぞや?」
- 2.5. VSCodeのPrettier+black環境の作り方
- 2.6. twitterAPI を利用するなら json-bigintは使わない方が良い
- 2.7. Yellowfinで睡眠情報の帯グラフを作成する
- 2.8. ぼーっと眺める自動スクロール用Bookmarkletを作った
- 2.9. 高さ対直径が1:1な円柱の空気抵抗について完全に理解したかもしれない
- 2.10. インタープリタを作る その35
- 2.11. インタープリタを作る その34
- 2.12. JavaScriptのClassでprivateメソッドを実装すると「Parsing error: Unexpected character '#' eslint」エラーになる
- 2.13. グランデータのマイページで初期パスワードを変更する方法
- 2.14. インタープリタを作る その33
- 2.15. webview.hostObjects が async で失敗するのをなんとかする
- 2.16. 【サイト高速化】Lazy Load(画像の遅延読み込み)の導入方法
- 2.17. 親のチェックボックスの状態を子のチェックボックスにも連動させるJavaScriptの書き方
- 2.18. シフトで負の値を与えるとどうなるのか?
- 2.19. インタープリタを作る その32
【React】【Vue】 など流行りのフレームワークを使うもののためのJS基礎 [this, call(), apply(), bind()]
this
thisは、その関数を呼び出しているオブジェクト
グローバルスコープで呼び出した場合は、グローバルオブジェクト
javaScriptは一番外におおきなグローバルオブジェクトで囲まれているため。bind()
thisが参照するオブジェクトを指定する
※
“`typescript
const myButton = {
content: ‘OK’,
click() {
console.log(this)
console.log(this.content + ‘ clicked’);
}
};myButton.click();
//コンソール
{ content: ‘OK’, click: [Function: click] }
OK clicked“`
この場合のthisはmyButtonのオブジェクトを示している
では次の場合はどうなるだろうか
myButtonクラスのメソッドを変数looseClickに代入している
“`typescript
const m
Warning: React has detected a change in the order of Hooks called by X でハマる
# 何をしていたか(悪いコード)
React Native で、とあるアプリで、アカウント情報を表示する画面を作成していた。
ReactNavigation を利用していた。処理の概要は以下
“`javascript
export default function MyPage {
// ユーザ情報
const [user, setUser] = useState();// ユーザ情報取得処理(あとで再利用する)
const userCheck = async () => {
const user = await getUser();
setUser(user);
}// 画面表示開始時に一度だけ読み取る
useEffect(userCheck, []);// ユーザ情報がなければ処理中を表示
if (!user) {
return (
処理中
);
}// ここから本画面 画面遷移用にnavigation 確保
const navigat
Webページの配色をユーザーが選択するJavaScript
過去にWebシステムの管理画面を作った際に、管理画面としては無難な配色でリリースしたのですが、
一部の利用者からページの色合いがイマイチ気に入らない、といった意見をいただきました。一部の意見で配色を変更したとしても、別の一部から同様の意見が出ないとも限らないため、
だったら各自で好みの配色を選択できるようにしてしまおう!ということで、JavaScriptでそんな機能を作ってみました。
## HTML
まずはHTMLです。
青、緑、赤の各ボタン押下をすることで、
<ul>のメニュー部分と<h1>の見出しの配色を変更することとします。
<button>のvalue値に配色コードを持たせています。“`html:sample.html
sample
Denoは全てのコードをstrict modeで実行する
## strict modeとは何か
非ES ModulesのJavaScriptでは、ファイルの先頭や関数の先頭に`"use strict"`という記述を行うことで、**strict mode**が有効になります。
```ts
function log(val) {
"use strict";
console.log(val)
}
```このstrict modeは以下のような効果があります。
- 存在しない変数への代入をエラーとして扱う
- with文の削除
- 8進数表記を禁止
- 予約語の追加
- eval内で宣言した変数のスコープ
- などなどstrict modeは、後方互換性のために排除できなかった、挙動に問題がある構文を排除し、将来の言語の拡張や動作の高速化に対応するものです。
(たまに後方互換性を排除してJavaScriptをイチから作り直してほしいという人がいますが、strict modeが実質それだと考えられます。)このstrict modeですが、**ES Modules**ではデフォルトで有効になっています。
## Deno と
ワイ「Node.jsってなんぞや?」
#ワイ「JavaScriptを触りたいンゴ」
ワイ「せっかくJavaScriptとTypeScriptについて知ったから触ってみたいで」
PC「JavaScriptはブラウザ上で動く言語やで^^」
ワイ「なんやこいつ」
ワイ「C++とかPythonとかとは仕様が違うんか」
PC「せや」
PC「だからファイルの読み書きが出来なかったり、通信が出来なかったりするんやで^^」
ワイ「なんやこいつ」
![js-ts.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/379533/df4cc731-f64f-17ab-1270-90e15ab6ab65.jpeg)#ワイ「どうするのが正解なんや?」
ワイ「まあ誰かがいい感じの作ってくれてるやろ(未来予知)」
PC「`Node.js`を使えばいいんやで」
ワイ「ほらな」
ワイ「なんやそいつは」
Nodeくん「説明しよう!!」
ワイ「なんやこいつは」
Nodeくん「`Node.js`は一言で言うと、JavaScriptの`実行環境`だよ」
Nodeくん「ローカルで実
VSCodeのPrettier+black環境の作り方
# Formatterとは
コードの種類に応じて、自動で空白とか改行などの整形を行う拡張機能のこと。
有名なものでは、Prettier(JS, TS, yaml, html等が対応)やBlack(python用)などがある。
基本的にはPrettierを用いれば、大抵のプログラムは対応しているが、
PrettierはPythonに非対応のため、Pythonの時のみBlackを使うように設定する必要がある。# Prettierのインストール
VSCodeでPrettierを使用するには、拡張機能をインストールします。
まずVS CodeのExtension panelでPrettier-Code Formatterを検索しインストールします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/346471/cd23be27-049c-8a10-552b-f0d04893b5b4.png)## default formatterをPrettierに設定
画面左上のタブから`Code→基本
twitterAPI を利用するなら json-bigintは使わない方が良い
大きい数字を扱うために、json-bigintを使おう。
って記事をよく見る```
const JSONbig = require('json-bigint');
axios.defaults.transformResponse = function (data) {
return JSONbig.parse(data);
};```
何桁まで使えるか?ってことは書いてない。
そこで調べてみた。# json-bigint あり
送信
最大16桁
※big-intが効いてない可能性もあり受信
最大19桁
1480959136104054785# json-bigint なし
送信
最大16桁
5333330289473823受信
最大16桁
1480959136104054上記を踏まえて、
2022年1月12日現在、twitter_idの最大は何桁なのか?というと最大19桁
1480959136104054785であった。
さらに桁は増え続けるので、twitter_apiなどを利用する場合は
明示的にtwitter_idな
Yellowfinで睡眠情報の帯グラフを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/223443/daee613f-ba66-982a-e28d-f4274f83dc53.png)
#はじめに
今回も要望がありd3.jsのライブラリや記事を探していたら、近いことをされている方がいたので[その方の記事](https://zdassen.hatenablog.com/entry/2018/02/21/012842)のX軸とY軸を切り替えたものを今回記事にしました。
睡眠時間のデータを時間ごとの帯グラフの上に描画するイメージです。#ソースはこちら
詳しくは[その方の記事](https://zdassen.hatenablog.com/entry/2018/02/21/012842)の解説を見てもらえるとわかりますが、このグラフは直近7日分の日付を動的に取得しているので場合によって静的にするか-1日だけの表示にするか変更が必要です。また、データの分割は[同じ方のこの記事](https://zdassen.hatenablog
ぼーっと眺める自動スクロール用Bookmarkletを作った
## 0.初めに
私は、非エンジニアなのでこの記事は初心者向けです。
Qiitaや掲示板を閲覧するときに、自動スクロールして、ぼーっと眺めたかったのでそういうブックマークレットを探してみました。
## 1.見つけたもの
以下のページにひな形になる情報がありました。
速度調整できる自動スクロールのブックマークレット | MIII.me
https://miii.me/4326.html個人的には、以下の点が、不便だったので変更してみました。
* ブックマークバーから起動/停止はちょっと使いづらい
* スクロール速度が変更できない## 2.作った物
以下の画像の通りです。
![Clipboard02bml.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35574/c55517bb-1467-789b-0fa0-b9b1e412a0da.jpeg)
処理の流れは以下。
1. ブックマークバーで「スクロ」クリック
1. スクロールボタンが常に画面左上部に表示される
1. スクロールボ
高さ対直径が1:1な円柱の空気抵抗について完全に理解したかもしれない
# 何故にそんなことを考えたの?
当初の目的は、「空気抵抗を最小限にするにはどんな断面がいいの?」という疑問でした。
そのために[この記事](https://qiita.com/Toyoharu-Nishikawa/items/b757dc8a4913a575f156)を参考にジューコフスキー翼を作ってみて、その抗力を調べようと思ったのですが、
「抗力係数が分からねぇ…」という根本的な問題にぶち当たりました(当然ですが)。# で、それじゃあどうやって抗力を求めるの?
そこで色々とGoogle先生に聞いてみるも、ほぼ答えは
$$ D = \frac{1}{2} \rho v^2 C_d $$
(ρは空気の密度、vは速度、Cdは抗力係数)
この記述以外がなかなか見当たらねぇ…。と悩んでいたそんなところ、
こんなサイトがあるじゃありませんか。https://h-a-labo.amebaownd.com/posts/2558036
(現在は撤回されていますが、僕がアクセスした当時は抗力の試算方法も載っていました)
こりゃすげぇ!!と早速試しに円柱の空気抵抗を計算してみたら、既存の
インタープリタを作る その35
#概要
インタープリタを作ってみた。
jsforthを使ってみた。
サウンド拡張する。
ドレミ、やってみた。#サンプルコード
```
play" ドドソソララソソファファミミレレドドソソファファミミレレソソファファミミレレドドソソララソソファファミミレレド"```
#成果物
https://embed.plnkr.co/plunk/OGxI4fZKkX7jZE7f
以上。
インタープリタを作る その34
#概要
インタープリタを作ってみた。
jsforthを使ってみた。
グラフィック拡張する。
sin波、やってみた。#写真
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/1fc33c49-7d6b-e5a5-06ca-3d2ab2f151b4.png)
#サンプルコード
```
: test 400 1 do i i sin susume loop ;
test
```#成果物
https://embed.plnkr.co/plunk/jfz9aBHPsUwLwPY3
以上。
JavaScriptのClassでprivateメソッドを実装すると「Parsing error: Unexpected character '#' eslint」エラーになる
## はじめに
ESLintを設定している時に、以下の図のようなエラーが発生した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1372684/7f45977c-39c1-9484-2659-c54ecba53200.png)今回はこのエラーを解消する方法について調べてみたのでその備忘録を残す。
## ESLintについて
https://qiita.com/yuta-katayama-23/items/5d73bbe79c19301551df#eslint%E3%81%AE%E8%A8%AD%E5%AE%9Aを参照。
## ESLintのparserOptionsを指定する
JavaScriptsのprivateメソッドはes2022の機能なため、以下のようにESLintの設定を変える必要がある。```json
// .eslint.json
{
...
"parserOptions": {
"ecmaVersion": 13
},
...
}
```
グランデータのマイページで初期パスワードを変更する方法
電気使用料を調べるためにマイページへログイン。
ログイン → 初期パスワード入力 → メール認証 → パスワード変更画面
するとパスワード変更画面で「登録する」ボタンが反応しません。しょうがないのでデバッグさせていただきました。
結論だけ書きます。1. パスワードは「半角英数字10文字以上20文字以下で入力」。
- コンソールからsubmitを送信```
$('#submenu_password_init').submit();
```無事にログインできました。
---
※デバッグ風景
エラーメッセージが出ないのでパスワードの入力規則が分かりにくかった。
(よく見たら画面に書いてありました)
![image.png](https://qiita-image-store.s3.ap-n
インタープリタを作る その33
#概要
インタープリタを作ってみた。
jsforthを使ってみた。
グラフィック拡張する。
kame作ってみた。#写真
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/1064dd5c-7304-8e9a-0edf-8f2be043d4b5.png)
#サンプルコード
```
: koch 5 walk -60 turn 5 walk 120 turn 5 walk -60 turn 5 walk ;
: koch1 koch -60 turn koch 120 turn koch -60 turn koch ;
: koch2 koch1 -60 turn koch1 120 turn koch1 -60 turn koch1 ;
koch2 -60 turn koch2 120 turn koch2 -60 turn koch2```
#成果物
https://embed.plnkr.co/plunk/0IqMlprttBveL5TL
以上。
webview.hostObjects が async で失敗するのをなんとかする
```js:JavaScript
addEventListener('_exe.Ready',e=>{var url = `https://script.google.com/macros/s/SampleDeployId/exec`;
var text = `SampleText: Fixed newly exposed boat not showing up in the boat yard menu
Changed contraptions to drop resources and inventory objects (crates) to drop resources even
when killed with fire. Previously anything killed by fire would drop nothing.`chrome.webview.hostObjects.exe.PostError(url,text).then(r=>{
console.log(r)// null、async失敗
})
_exe.post(url,te
【サイト高速化】Lazy Load(画像の遅延読み込み)の導入方法
# 前提
本記事ではJavaScriptライブラリ(vanilla-lazyload)を利用して、画像の遅延読み込みに対応する方法について記載します。下記の状況を想定しています。+ WordPressを利用していない
+ PageSpeed Insightsで改善項目として「オフスクリーン画像の遅延読み込み」を挙げられた※記載に誤りがあったり、「もっとよい方法があるよ!」という場合はご教授いただけますと幸いです。
# Lazy Loadの導入手順
## 1.vanilla-lazyloadを読み込む
下記GitHubページにアクセスし、verlok氏のvanilla-lazyloadをダウンロードまたはCDNを利用して読み込みます。
https://github.com/verlok/vanilla-lazyload### 自分の環境にダウンロードする場合
1. 「code」ボタンをクリックし、「Download ZIP」を選択します。
1. ダウンロードしたフォルダの中にある「dist」フォルダの「lazyload.min.js」を自分の環境に保存します。
1. HTM
親のチェックボックスの状態を子のチェックボックスにも連動させるJavaScriptの書き方
## 実現したい機能
- **親のチェックボックスにチェックが入ったら、子のチェックボックスにもチェックを入れる**
- **親のチェックボックスでチェックが外れたら、子のチェックボックスからもチェックが外れる**
- **子のチェックボックスでチェックが入ったり、外れたりしても親のチェックボックスは反応しない**## サンプルページ
https://kaibara.github.io/js-checkBox/## Github
https://github.com/kaibara/js-checkBox## コード
### HTML```index.html
- 親チェックボックス
- 子チェックボックス1
- シフトで負の値を与えるとどうなるのか?
左シフトと右シフト(符号なし)に負値を与えてみます。
実行環境は macOS 12.1 (Intel版) のターミナル
```Console:ターミナル
$ node
Welcome to Node.js v16.13.1.
Type ".help" for more information.
> (1<<(-1)).toString(16) '-80000000' > (1<<(-2)).toString(16) '40000000' > (1<<(-3)).toString(16) '20000000' > (1<<(-31)).toString(16) '2' > (1<<(-32)).toString(16) '1' > (1<<(-33)).toString(16) '-80000000' > (0x1234<<(-4)).toString(16) '40000000' > (0x1234<<(-8)).toString(16) '34000000' > (0x1234<<(-16)).toString(16) '12340000' > (0x1234<<(-32)).t
インタープリタを作る その32
#概要
インタープリタを作ってみた。
jsforthを使ってみた。
sandbox作ってみた。#フィボナッチ数列
```
: fib 7 0 1 rot 0 do swap over + dup . loop ; ok
fib1 2 3 5 8 13 21
```#九九
```
: kuku 10 1 do 10 1 do i j * . loop cr loop ;
kuku1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
```#fizzbuzz
```
: sp 32 emit ;
: fizzbuzz 100 1 do i 3 mod