javascript的变量声明只要一个var,如果我要确定的类型能实现吗?

如题,我需要限制我的数据为某个类型,不希望JavaScript根据我赋的值来确定该变量的类型,可不可以做到?如果能做到应该怎么实现?(例如实现uint16,uint32这一类可以给变量分配固定字节的类型)

阅读 6.4k
10 个回答

TypeScript

JavaScript是种弱类型的语言,因为这个特性,在声明时不会强制限定类型,使得数据类型会根据你所赋值而动态转换为系统认为合适的类型。

楼上同学说到的TypeScript的确可以部分解决这个问题,但是TypeScript实现并不像C语言一样能强制判断类型。TypeScript基于JavaScript,只是在语法检查器上加上了限制,TypeScript最终执行时会被编译为JavaScript,只是在编写代码时能做出限制,执行时不能

想实现你所说的效果,
一是换一门强类型的语言
二是自行判断数据类型或者是强制数据类型转换

这就是js弱类型的精彩之处啊,要你处处判断着其中的隐式转换,很刺激

TypeScript是一种选择
轻量级别可以选择flow

var num = new Number(0);
var str = new String("str");
var arr = new Array("0","1");
...

你只能通过取一个合适变量名“实现”这个。

感觉只能模拟实现,但是不是javascript原有的特征,毕竟javascript语法中充满了类型转换.
所谓模拟实现也就是:
运行之初检测值,如果值类型与目标类型不同,则报错.
大概就是这样.

不介意兼容性的话,asm.js

例如

function mymodule(stdlib, foreign, heap) {
    "use asm";

     function test(x, y) {
         x = x|0;  // x是个32位int
         y = +y;   // y是个double
         
         x = 5.0; // 类型错误,5.0不是int( doublelit is not a subtype of int)
         return x + y;  // 类型错误,int和double不能直接相加
         
     }
}

在Firefox里跑是这样的,只是定义就被检测出类型错误:

图片描述

通过一些简单的标识来表示类型。还提供了类似Int32Array这样带类型的数组。

弱类型的语言,可以再使用变量的时候做下验证

只想出这种方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
<script>
    function Person(value) {
        this.value = value;
    }
    var person = new Person(11);
    Object.defineProperty(person, "value", {
        get: function () {
            return this._age;
        },
        set: function (newValue) {
            if(isNaN(parseInt(newValue))){
                throw new Error('value not int');
            }
        }
    });


    Object.seal(person);

    person.value = 1;

    person.value = 'a';
</script>
</body>
</html>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题