2016年03月01日

【JavaScript】引数のデフォルト値を定義する

これまたとっくに出し尽くされている、かつES6で解決するネタではありますが・・・

先日質問されたことがあるので、念のため掲載。

と言うか、以下サンプル。


function triangle(base, height) {
  if (base == undefined) {base = 1;}
  if (height == undefined) {height = 1;}

  return base * height / 2;
}

alert(triangle(2, 2)); // 2
alert(triangle(5));     // 2.5
alert(triangle());       // 0.5


JavaScriptでは、関数を呼び出す際に引数の個数をチェックしません。

また、指定されていない引数には、全てundefinedがセットされます。

この仕様を利用して、上述したような感じにすればいい訳です。



なお、上述のようなやり方では、二つ目以降の引数や、3つ以上ある引数の途中だけを省略するような事は実現できません。

これはこれで、別の方法があるのですが、こちらについてはまた後日。





ウサコのLINEすたんぷ好評配信中!

https://store.line.me/stickershop/product/1014321/ja

posted by kinky-do at 20:38| JavaScript

2016年02月28日

【JavaScript】擬似的にブロックスコープを実装してみる

JavaScriptの変数定義の仕様上、「変数の意図しない競合を防ぐ」と言う事は、案外需要の高いトピックかもしれませぬ。
※ES6になればletが使えるので、万事解決なんですけどw


と言うわけで、擬似的にブロックスコープを定義するサンプルをご紹介します。


with ({b:0}) {
    if (true) {
        b = 5;
    }
}

alert(b); // 変数bはスコープ外なのでエラーとなる




まぁ、相当トリッキーというか、微妙な記述ですなんけど、こんな感じで無理やり実現する事が可能です。

with命令を使って、withブロック内でのみ参照可能な変数(実際には無名/匿名オブジェクトのプロパティ)を定義しています。


あんまり頻繁に使うのもアレですけど、どうしてもブロックスコープを使わなきゃならないような場合にお試しくださいませ。





ウサコのLINEすたんぷ好評配信中!

https://store.line.me/stickershop/product/1014321/ja

posted by kinky-do at 23:05| JavaScript

2016年02月23日

【JavaScript】encodeURI()とencodeURIComponent()について

JavaScruptでURL(URI)エンコードを行いたい場合、以下の関数が使えます。

encodeURI()
encodeURIComponent()
※ escape()はもはや無いものとして考えます

両者ともに使い方は簡単で、引数としてエンコードしたい値を渡すだけです。


では、この2つの関数はそれぞれ何が違うのかと言うと、エンコード対象とする値に若干差異があります。

encodeURI()は、URLにおいて特別な意味を持つ予約文字「/」「:」「&」「+」「=」などはエンコードしません。

逆にencodeURIComponent()は、URLで使用する記号をすべてエンコードします。


一見すると、「じゃあ常にencodeURIComponent()を使えばええやん」ってなるかもしれませんが、少し注意が必要です。

と言うのも、「/」「:」「&」「+」「=」を全てエンコード対象とするため、引数としてURLそのものを渡すと、URLとして使えない値が返却されてしまいます。
※「http%3A%2F%2Fwww〜〜〜」みたいな値になってしまいます



じゃあ、どうすればいいのか。



答えは簡単。



元のURLをエンコードが必要な部分とそうじゃない部分に分けて、必要な箇所にだけencodeURIComponent()を適用し、それぞれを結合したURLを利用すればいいだけです。


方法はいくらでもありますけど、単純にこれでいいと思います。




ウサコのLINEすたんぷ好評配信中!
https://store.line.me/stickershop/product/1014321/ja
posted by kinky-do at 22:30| JavaScript