javascript的变量声明只要一个var,如果我要确定的类型能实现吗?
高洛峰
高洛峰 2017-04-11 09:52:33
[JavaScript讨论组]

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(10)
高洛峰

TypeScript

怪我咯

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

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

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

迷茫

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

天蓬老师

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

PHP中文网
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这样带类型的数组。

PHP中文网

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

天蓬老师

只想出这种方法

<!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>
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号