Javascript是松散类型的语言,但我们可以严格要求吗?
var myVar = "string";
......
//later on
myVar = 123;//changed to number
所以,现在我希望如果将myVar更改为“somestring”,“anystring”就可以了。但是如果将myVar更改为123之类的数字,那么myVar中先前定义的字符串应该作为结果返回。
答案 0 :(得分:2)
不,语言不对。但您可以尝试使用TypeScript进行编程。
答案 1 :(得分:1)
在支持它的浏览器上,您可以使用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"
这可以用于定义类型化的全局变量(如示例中所示)和对象属性,但不能用于定义局部变量或函数参数。