2014-02-13 55 views
0

Javascript是鬆散類型的語言,但我們可以嚴格這樣嗎?JavaScript對語言嚴格要求

var myVar = "string"; 
...... 
//later on 
myVar = 123;//changed to number 

所以,現在我想,如果myVar更改爲「somestring」,「anystring」就沒問題。但是,如果myVar更改爲123之類的數字,那麼以前在myVar中定義的字符串應該返回結果。

+0

不是沒有一些包裝對象來檢查類型。 – Sirko

+0

[TAJS](http://www.brics.dk/TAJS/)(用於JavaScript的類型分析器)可能很有用。儘管我從未使用它。 – tom

回答

2

不,錯誤的語言。但是,您可以嘗試使用TypeScript進行編程。

1

在支持它的瀏覽器,你可以使用Object.defineProperty()MDN定製getset功能來實現這樣的效果:

function def(obj, prop, cond) { 
    Object.defineProperty(obj, prop, { 
     get: function() { 
      return obj["_" + prop]; 
     }, 
     set: function(value) { 
      if (cond(value)) { 
       obj["_" + prop] = value; 
      } 
     } 
    }); 
} 

function str(value) { 
    return typeof value === 'string' || value instanceof String; 
} 

def(window, 'myVar', str); 

myVar = "something"; 
myVar = "anything"; 
myVar = 42; 
myVar; // => "anything" 

這可以用來定義類型的全局變量(如示例)和對象屬性,但不是局部變量或函數參數。