严格要求javascript语言

时间:2014-02-13 10:34:21

标签: javascript

Javascript是松散类型的语言,但我们可以严格要求吗?

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

所以,现在我希望如果将myVar更改为“somestring”,“anystring”就可以了。但是如果将myVar更改为123之类的数字,那么myVar中先前定义的字符串应该作为结果返回。

2 个答案:

答案 0 :(得分:2)

不,语言不对。但您可以尝试使用TypeScript进行编程。

答案 1 :(得分: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"

这可以用于定义类型化的全局变量(如示例中所示)和对象属性,但不能用于定义局部变量或函数参数。