chrome dev toolsのコンソールに出力されたオブジェクトをコピーする方法

tl;dr

  1. オブジェクトを右クリックしてStore as Global Variableをクリック
  2. copy(temp1)
  3. ⌘+Vでペーストできる!

f:id:hitonatsu:20190416144339p:plain
これをこうして…

f:id:hitonatsu:20190416144223p:plain
コピペできた

ありがとうstackoverflow

stackoverflow.com

手法はここに書いてあることが全て…。

Failed to save to temp variable.って言われるんですが

コンソールの環境によってはプロセスが違うからなのかたまにコケる。

Store as Global VariableするとFailed to save to temp variable.と言われてtemp変数に格納するのに失敗してしまう。

この場合はconsoleの「JavaScript Contexts」を任意のものに変えるとコケなくなる。

stackoverflow.com

まあこれもここに書いてあることが全てなんですが…


誰も教えてくれないからこんなことも知らないよ〜ということで。書いておけば忘れないけど書かなかったら忘れそうなので書いた。

オブジェクトの特定プロパティが両方存在するかチェックするときの速度について調べていた

経緯

github.com

react-loopsというHooksを使ってJSXでForループをやるというアプローチのライブラリが出ていたので見ていた。

実装どうやってるんだろうな〜って思ってソース見てたらなんかPropsオブジェクトのプロパティをチェックしていて、あんまり見ないビット演算子でXORしていた。

https://github.com/leebyron/react-loops/blob/b04cb3be799c2ff5d87dc14b1b2430d9503e64e2/react-loops.js#L69

(props.hasOwnProperty("as") ^ props.hasOwnProperty("children")) === 0

なんで^ってるんだろうなっていう疑問と、自分なら&&かあるいはそもそもプロパティが特定なのだから論理演算子の変換!!(&&)で書く気がするという気持ちになった。

gyazo.com

こう書けるのでは?

ただなんとなく『XORすると速度面で有利なのでは?』という気もしたのでパフォーマンスを調べる気持ちになって調べていた。

さて速度的にどうなんでしょう。

結論をいいますと

XOR別に速くなさそう…?

jsPerfたてた

jsperf.com

みなさんもrun testsしてお手元のブラウザでチェックしてみてください

僕の環境でモダンブラウザ3種(Chrome+FF+Safari)を実行してみたら

  • !!(baseProps.foo && baseProps.bar)

  • baseProps.hasOwnProperty('foo') && baseProps.hasOwnProperty('bar')

  • (baseProps.hasOwnProperty('foo') ^ baseProps.hasOwnProperty('bar')) === 0

の順番で早かった。

hasOwnPropertyするならわずかに^(ビット演算子XOR)するより&&(論理演算子AND)したほうが速かった。

手元にいまWindowsないのでWindows環境のテストはやれてない。

XORのメリットよくわかってない

速度面で速いのではという予想をしていたけどそうでもなさそうで、それ以外になにかメリットがあるのかどうかはよくわかっていない。

Conditionalの場面でXORあんまり見ないのと、ググっても明確にこういうメリットがありますというのが出てこなかった。

こういうメリットがありますっていうのご存知の方は教えてください.


jsPerfはテストするたび結果のスナップショットがグラフに反映されていくので、ぜひみなさんもテストしてみてください。

Object property existence check speed · jsPerf