这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要给大家介绍了 Javascript 中常用类型的格式化方法,其中包括格式化浮点数、格式化有符号整数 (int32)、格式化无符号整数 (uint32)、格式化布尔值以及格式化字符串等,文中给出了详细的示例代码,有需要的朋友们可以参考借鉴,下面来一起看看吧。
前言
相信大家都知道因为 JavaScript 是弱类型的语言,项目写大了会非常难以把控,容易出各种问题。幸好有强类型的 TypeScript 可以很大程度上弥补这一缺陷,但 TypeScript 提供的强类型是编译阶段的,虽然绝大部分类型相关的问题在编译阶段都能被覆盖到,但对于小部分在运行时才会出错的错误还是无能为力。
例如以下几种常见的情况:
1、定义为 number 的属性,赋值的时候,如果赋值源没有定义强类型,这样就会绕过编译检查的阶段,到运行时发现可能传进来的是个字符串。类内部再一顿加减乘除,很容易导致一大片数据全都被污染为 NaN。
2、定义 boolean 类型的属性,经常会赋值为一个对象,虽然运行起来不会出明显问题,但其实只想存储一下对象是否为空的状态,却有可能导致那个对象始终无法被回收。
3、定义为整型的属性,比如 index。这点即使 TS 也无能为力,因为 TS 里也没有 int。很容易传入一个浮点数,导致从数组取索引时产生报错。
在 JavaScript 运行时,任何用法都有可能发生,如果要写出强壮的组件或框架,类似这些问题,都是必须要考虑到的。解决方案就是对于任何来自于外部传入的参数或变量进行格式化,这样只要格式化一次,组件和框架内部就能高效地正常运转,不用再各种特殊判断。
下面列举几种常用类型的高性能格式化方法:
格式化浮点数
- value = +value || 0;
测试输出:
- function test(value) {
- value = +value || 0;
- return value;
- }
- test("123"); //123
- test("123.5"); //123.5
- test(123); //123
- test(123.5); //123.5
- test("abc"); //0
- test("123ab"); //0
- test(NaN); //0
- test(null); //0
- test(undefined); //0
格式化有符号整数 (int32)
- value = +value | 0;
等价于:
- value = ~~value;
测试输出:
- function test(value) {
- value = +value | 0;
- return value;
- }
- test("123"); //123
- test("123.5"); //123
- test(123); //123
- test(123.5); //123
- test("-123.5"); //-123
- test("abc"); //0
- test(NaN); //0
- test(null); //0
- test(undefined); //0
要特别注意一下:以上这种格式化方式只适用于 32 位有符号整型数,也就类似其他语言里的 int,正整数部分最大只能到
。uint32 或者更大的 int64 是不行的, 会被截断。具体可以参考这里:按位操作符。通常在其他语言里,可以使用 int 的场景使用这种格式化方法都完全没问题。
- 2147483647(2^31-1)
格式化无符号整数 (uint32)
- value = +value >>> 0;
测试输出:
- function test(value) {
- value = +value >>> 0;
- return value;
- }
- test("123"); //123
- test("123.5"); //123
- test(0xFFFFFFFF); //0xFFFFFFFF
- test(0xFFFFFFFF + ).5; //0xFFFFFFFF
- test("-123.5"); //0xFFFFFF85
- test("abc"); //0
- test(NaN); //0
- test(null); //0
- test(undefined); //0
要注意一下:位移运算符是三个箭头 >>>, 有且只有这个运算符是操作无符号整型,结果是一个 uint32,范围从 0~4294967295(2^32-1),其他所有位移运算符的结果都是有符号整型(int32),因此也没法表示大于 2147483647(2^31-1)的数字。
格式化布尔值
- value = !!value;
测试输出:
- function test(value) {
- value = !!value;
- return value;
- }
- test(true); //true
- test(123); //true
- test(123.5); //true
- test({}); //true
- test([]); //true
- test("abc"); //true
- test(""); //false
- test(false); //false
- test(NaN); //false
- test(null); //false
- test(undefined); //false
格式化字符串
字符串的格式化没有那么固定的需求,一般情况下避免 null 就行了,因为其他对字符串变量的操作,比如加号,都会自动转换类型。
- value = value || "";
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用 Javascript 能带来一定的帮助,如果有疑问大家可以留言交流。
来源: http://www.phperz.com/article/17/0512/329142.html