2016/12/14
短絡評価というらしい
BootStrap3というHTMLのフレームワーク?がありまして、そいつを使ってみようかダウンロードしてごにょごにょしていたら
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script>
という記述がありまして、まず先にgoogleさんからjqueryを読み込んでいるのですがローカルからもjqueryを読もうとしています。2行目にwindow.jQuery || document.writeがあるのでwindow.jQueryが偽ならば、document.writeでscript要素を作成してローカルから読み込むになるんだなとは感じ取りました。googleさんからjqueryが読み込めていればwindow.jQueryというオブジェクトが生成されておりwindow.jQuery || document.writeの左辺が真になり右辺は評価されないということだと意味はくみ取れるんですが自分ではこのコードは書けません。
いまいちよく意味がつかめていないからです。||や&&は論理演算子であり、trueかfalseを返すと思っていたからです。
var a="hoge";
if(a || b){alert("aかb");}
のようにifに真か偽を返すものとばっかり思い込んでいますのwindow.jQuery || document.writeも真か偽を返すように受け取ってしまいます。JavaScriptは必ずしも真か偽のみを返すわけではないとのことです。
指定された演算対象の一方を返します
とのことです。
MDN論理演算子にその旨きちんと書いてあります。私は最初に見たQiitaのJavaScriptの「&&」「||」について盛大に勘違いをしていた件がよくわかりました。特にコメント。またウィキペディアにも短絡演算子の項目があり、言語により真偽値を返すか返さないかもあり参考になります。
結果、BootStrap3はjqueryをGoogleのCDNから利用するんだけど万一のためサーバにもjqueryアップしておいてねってことですね。