如题,我需要限制我的数据为某个类型,不希望JavaScript根据我赋的值来确定该变量的类型,可不可以做到?如果能做到应该怎么实现?(例如实现uint16,uint32这一类可以给变量分配固定字节的类型)
如题,我需要限制我的数据为某个类型,不希望JavaScript根据我赋的值来确定该变量的类型,可不可以做到?如果能做到应该怎么实现?(例如实现uint16,uint32这一类可以给变量分配固定字节的类型)
JavaScript是种弱类型的语言,因为这个特性,在声明时不会强制限定类型,使得数据类型会根据你所赋值而动态转换为系统认为合适的类型。
楼上同学说到的TypeScript的确可以部分解决这个问题,但是TypeScript实现并不像C语言一样能强制判断类型。TypeScript基于JavaScript,只是在语法检查器上加上了限制,TypeScript最终执行时会被编译为JavaScript,只是在编写代码时能做出限制,执行时不能。
想实现你所说的效果,
一是换一门强类型的语言,
二是自行判断数据类型或者是强制数据类型转换。
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>
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
TypeScript