JavaScript : null, undefined, falseの違い

Javascriptで変数の初期化をする時に、null、false、undefinedとそれぞれ設定でどう違うか調べてみた。

まずnullはJavascriptの場合データー型がオブジェクト。

そのため、

ver test = null;

とした場合、testには空のオブジェクトが入る。(ECMAScriptのバグらしく理想的には単純にnullになるべきらしい。)つまりは空の設定値が入っている状態になる。

対してundefinedはグローバルオブジェクトの変数である。undefinedでは設定値自体が存在しない状態になる。

よって、

null === undefinedではundefinedはオブジェクトではないためfalseが返されるが、

null == undefinedではtrueが返される。

var test = false;

で初期化する時はデフォルトのブーリアン値を設定する場合。ただ単純に変数を初期化するだけであれば、とくに何も代入せずに、

var test;

の方がいい。(ブーリアン値やnullオブジェクトを入れる必要性がなければ)

http://www.w3schools.com/js/js_datatypes.asp

http://www.w3schools.com/js/js_best_practices.asp

http://stackoverflow.com/questions/31890590/practice-initialize-variable-to-false

 

Drupal7でContextを使ってViewブロックを指定するのと、pageテンプレートを分けてブロックページでViewブロックを表示する違い

Drupal7でContextを使ってViewブロックを指定するのと、pageテンプレートを分けてブロックページでViewブロックを表示する違いについて。

例えばフロントページのみに表示するViewブロックがあったとして、page–front.tpl.phpというテンプレートを作成し、そのテンプレートのみにその特定のViewブロックを置くためのリージョンを作成し、page.tpl.phpには作成しないことでフロントページのみにそのViewブロックを表示させることができる。

またこれはContextモジュールを使ってより簡単に実現することも可能。

2つの方法の違いは、前者は他のページを表示している時にも前者のViewブロックの変数が取得されている。(表示されないまでも)

後者はフロントページの表示の時のみ取得される。

View用のpreprocessファンクションを作成することで挙動がより詳しくわかる、

https://api.drupal.org/api/views/theme!theme.inc/function/template_preprocess_views_view/7.x-3.x

jQuery each object, element

var $collection = $("ul > li");

$collection.each(function(index, element){

console.log("index is "+index);

console.log("Javascript element is"+element.innerHTML);

console.log("jQuery element is "+$(element).text());

});

var objectCollection = {

school : {

city: "Vancouver",

province: "BC"

}

};

$.each(collection, function(key, value)){

console.log("key is "+key);

console.log("value is "+value);

$.each(value, function(nestedKey, nestedValue){

console.log("Nested key is "+nestedKey);

console.log("Nested value is "+nestedValue);

});

}

JavaScript : Define an empty array

var emptyArray = [];

var newEmptyArray = new Array();

These two are the same, and []; is simpler way. There is no need to use the later one unless you need to define the length of the array.

var anotherEmptyArray = new Array(100);

This defines anotherEmptyArray having 100 items with all slots containing undefined.

JavaScript : global variable and scope, function declaration

"name" variable in the code below outputs "undefined".

var name = "Baggins";
(function () {
    // Outputs: "Original name was undefined"
    console.log("Original name was " + name);

    var name = "Underhill";

    // Outputs: "New name is Underhill"
    console.log("New name is " + name);
})();

 

The (function(){ })(); creates another scope,  and variable defined outside of the scope is not accessible.

The example below is in a different situation.

var name = "Here";

function(){

console.log(name);

}

This is accessible. I need to dig into how they differently work.

 

JavaScript : function declarations vs function expressions

Basically, there are two ways to define a JavaScript function.

function white(){};

var declare = function white(){};

The first one is function declaration, and the later one is function expression which put a function into a defined variable.

The difference between the two is below.

hoisted();  //output the console log

notHoisted();  //output undefined

function hoisted(){

console.log('this function is hoisted!');

}

var notHoisted = function() {

console.log('this function is not hoisted!');

}

In Javascript,  variables and functions are "hoisted" and they are actually available before they are declared, however,

function definition hoisting only occurs for function declarations, not function expressions.

Reference :

http://adripofjavascript.com/blog/drips/variable-and-function-hoisting

http://kangax.github.io/nfe/