扫码关注官方订阅号
如题,我需要限制我的数据为某个类型,不希望JavaScript根据我赋的值来确定该变量的类型,可不可以做到?如果能做到应该怎么实现?(例如实现uint16,uint32这一类可以给变量分配固定字节的类型)
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
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这样带类型的数组。
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>
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
TypeScriptJavaScript是种弱类型的语言,因为这个特性,在声明时不会强制限定类型,使得数据类型会根据你所赋值而动态转换为系统认为合适的类型。
楼上同学说到的TypeScript的确可以部分解决这个问题,但是TypeScript实现并不像C语言一样能强制判断类型。TypeScript基于JavaScript,只是在语法检查器上加上了限制,TypeScript最终执行时会被编译为JavaScript,只是在编写代码时能做出限制,执行时不能。
想实现你所说的效果,
一是换一门强类型的语言,
二是自行判断数据类型或者是强制数据类型转换。
这就是js弱类型的精彩之处啊,要你处处判断着其中的隐式转换,很刺激
TypeScript是一种选择
轻量级别可以选择flow
你只能通过取一个合适变量名“实现”这个。
感觉只能模拟实现,但是不是javascript原有的特征,毕竟javascript语法中充满了类型转换.
所谓模拟实现也就是:
运行之初检测值,如果值类型与目标类型不同,则报错.
大概就是这样.
不介意兼容性的话,asm.js
例如
在Firefox里跑是这样的,只是定义就被检测出类型错误:
通过一些简单的标识来表示类型。还提供了类似
Int32Array这样带类型的数组。弱类型的语言,可以再使用变量的时候做下验证
只想出这种方法