javascript typeOf 進階設計

寫出一個比typeof運算符更準確的類型判​​斷函數

var typeOf = function (o){
  var s = Object.prototype.toString.call(o);
  return s.match(/\[object (.*?)\]/)[1].toLowerCase();
};

typeOf({}); // "object"
typeOf([]); // "array"
typeOf(5); // "number"
typeOf(null); // "null"
typeOf(); // "undefined"
typeOf(/abcd/); // "regex"
typeOf(new Date()); // "date"

javascript in 特殊用法


// 判斷是否元素在陣列內
1 in [1,2,3]; // true

// 判斷屬性
var o = {p:1};
'p' in o; // true
'toString' in o; // true 隱含繼承 toString 方法

// 使用對象的hasOwnProperty方法判斷一下,是否為對象自身的屬性
var obj = {};
if ('toString' in obj) {
  console.log(obj.hasOwnProperty('toString')); // false
}

javascript 多行字串的寫法

字串後方補上反斜線就可以在下一行書寫程式碼

var s="hello \
world \
!";

javascirpt if 邏輯判斷式內為物件時是 true 還 false ?

空字串轉為 false, 但是 new String 仍為對象所以為 true, 空數組跟空對象都是 true

if('')console.log('pass'); 
if(new String(''))console.log('pass'); // pass
if([])console.log('pass'); // pass
if({})console.log('pass'); // pass

javascript 如何區分 array 和 object ?

下面代碼中,數組([])的類型也是 object 。而 instanceof 運算符可以區分數組和對象

typeof {} // "object"
typeof [] // "object"

var o = {};
var a = [];

o instanceof Array // false
a instanceof Array // true

// 判斷是否為array另一方式
Array.isArray([]); // true

javascript 如何跳出多層迴圈?

滿足條件時,直接跳出雙層循環。如果break語句後面不使用標籤,則只能跳出內層循環,進入下一次的外層循環。

top:
  for (var i = 0; i < 3; i++){
    for (var j = 0; j < 3; j++){
      if (i === 1 && j === 1) break top;
      console.log('i=' + i + ', j=' + j);
    }
  }

javascript typeOf 進階設計

寫出一個比typeof運算符更準確的類型判​​斷函數 var typeOf = function (o){ var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1]....