Javascript中常用类型的格式化方法小结


Posted in Javascript onDecember 26, 2016

前言

相信大家都知道因为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,正整数部分最大只能到2147483647(2^31-1) 。uint32或者更大的int64是不行的,会被截断。具体可以参考这里:按位操作符。通常在其他语言里,可以使用int的场景使用这种格式化方法都完全没问题。

格式化无符号整数(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能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
用Div仿showModalDialog模式菜单的效果的代码
Mar 05 Javascript
javascript 数组的方法集合
Jun 05 Javascript
多个js与css文件的合并方法详细说明
Dec 26 Javascript
js判断为空Null与字符串为空简写方法
Feb 24 Javascript
javascript事件函数中获得事件源的两种不错方法
Mar 17 Javascript
jquery实现超简洁的TAB选项卡效果代码
Aug 28 Javascript
JavaScript随机生成颜色的方法
Oct 15 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
Sep 04 Javascript
基于vue2.0的活动倒计时组件countdown(附源码下载)
Oct 09 Javascript
JavaScript"模拟事件"的注意要点详解
Feb 13 Javascript
Vue项目路由刷新的实现代码
Apr 17 Javascript
微信小程序调用wx.getImageInfo遇到的坑解决
May 31 Javascript
Angular的自定义指令以及实例
Dec 26 #Javascript
如何提高javascript加载速度
Dec 26 #Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
Dec 26 #Javascript
javascript实现去除HTML标签的方法
Dec 26 #Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 #Javascript
JS实现密码框的显示密码和隐藏密码功能示例
Dec 26 #Javascript
原生JS下拉加载插件分享
Dec 26 #Javascript
You might like
PHP开发环境配置(MySQL数据库安装图文教程)
2010/04/28 PHP
yii2 commands模式以及配置crontab定时任务的方法
2017/08/19 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
jQuery(1.3.2) 7行代码搞定跟随屏幕滚动的层
2009/05/21 Javascript
javascript 年月日联动实现核心代码
2009/12/21 Javascript
javascript让setInteval里的函数参数中的this指向特定的对象
2010/01/31 Javascript
数组方法解决JS字符串连接性能问题有争议
2011/01/12 Javascript
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
jquery实现兼容IE8的异步上传文件
2015/06/15 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
利用Node.js制作爬取大众点评的爬虫
2016/09/22 Javascript
概述一个页面从输入URL到页面加载完的过程
2016/12/16 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
vue-froala-wysiwyg 富文本编辑器功能
2019/09/19 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python yield 小结和实例
2014/04/25 Python
Python六大开源框架对比
2015/10/19 Python
Tensorflow中使用tfrecord方式读取数据的方法
2018/06/19 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
Python循环实现n的全排列功能
2019/09/16 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
python 递归相关知识总结
2021/03/03 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
运动会跳远广播稿
2014/02/04 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
王力宏牛津大学演讲稿
2014/05/22 职场文书
大学专科求职信
2014/07/02 职场文书
艺术设计专业毕业生推荐信
2014/07/08 职场文书
党的作风建设心得体会
2014/10/22 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
学术研讨会主持词
2015/07/04 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
导游词之蜀山胜景瓦屋山
2019/11/29 职场文书