Javascript是鬆散類型的語言,但我們可以嚴格這樣嗎?JavaScript對語言嚴格要求
var myVar = "string";
......
//later on
myVar = 123;//changed to number
所以,現在我想,如果myVar更改爲「somestring」,「anystring」就沒問題。但是,如果myVar更改爲123之類的數字,那麼以前在myVar中定義的字符串應該返回結果。
Javascript是鬆散類型的語言,但我們可以嚴格這樣嗎?JavaScript對語言嚴格要求
var myVar = "string";
......
//later on
myVar = 123;//changed to number
所以,現在我想,如果myVar更改爲「somestring」,「anystring」就沒問題。但是,如果myVar更改爲123之類的數字,那麼以前在myVar中定義的字符串應該返回結果。
不,錯誤的語言。但是,您可以嘗試使用TypeScript進行編程。
在支持它的瀏覽器,你可以使用Object.defineProperty()
MDN定製get
和set
功能來實現這樣的效果:
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"
這可以用來定義類型的全局變量(如示例)和對象屬性,但不是局部變量或函數參數。
不是沒有一些包裝對象來檢查類型。 – Sirko
[TAJS](http://www.brics.dk/TAJS/)(用於JavaScript的類型分析器)可能很有用。儘管我從未使用它。 – tom