JavaScript中的16进制字符(改进)


Posted in Javascript onNovember 21, 2011

原始的代码:

//将文字转换为16进制 
function textToSix(str) { 
return escape(str).replace(/%/g, function () { 
return "\\"; 
}).toLowerCase(); 
}

改进后的:
//将文字转换为16进制 
function textToHex(str) { 
//escape对0-255以外的unicode值进行编码时输出%u****格式,例如:%u6267%u624b%u6cea%u773c 
//将其中的%替换成\就是十六进制的 
if (typeof str == "string") { 
return escape(str).replace(/%/g, function () { 
return "\\"; 
}).toLowerCase(); 
} else { 
return null; 
} 
}

主要是增加了一个验证是否为字符串的验证。

在完善了这个方法之后,我又觉得是不是要改进下面这个方法:

//将16进制表示为文字 
function sixToText(str) { 
return unescape(str); 
}

本意是将"\unnn"之类的字符转换回文字。其实,只需看看unescape这个方法的原理(工作原理:通过找到形式为 %xx 和 %uxxxx 的字符序列(x 表示十六进制的数字),用 Unicode 字符 \u00xx 和 \uxxxx 替换这样的字符序列进行解码。来自百度百科的解释)。就会知道我完全是多此一举。因为浏览器是可以解析十六进制的字符的。例如:

在IE9中:

JavaScript中的16进制字符(改进)

在Chrome中:

JavaScript中的16进制字符(改进)

再补充另外一点收获吧。其实在做这个解析被我替换后的字符时,我最初的想法是将"\"这个字符在替换回"%",然后再用unescape这个解码函数来解析字符。然而,当我在我想将"\"替换为"%"却发现了下面的一个比较有意思的现象:像“\”这个字符如果后面没有碰到“t”,"n"之类可以和t结合在一起组成转意字符的话,是会被浏览器忽略的。用实验来验证我的结论吧:

在IE9中调试:

JavaScript中的16进制字符(改进)

在Chrome下调试:

JavaScript中的16进制字符(改进)

在这里定义了一个变量,变量中含有一些平时可能很少出现的字符"\",调试的时候,看看上面的提示了吗,浏览器很智能的忽略掉了特殊位置的字符。因此在将一些看似很平常的字符(例如文件路径等)放在js的变量中,可能输出来的结果并不是预期的。

Javascript 相关文章推荐
利用javascript/jquery对上传文件格式过滤的方法
Jul 25 Javascript
jquery prop的使用介绍及与attr的区别
Dec 19 Javascript
JavaScript实现鼠标滑过图片变换效果的方法
Apr 16 Javascript
浅谈关于JavaScript API设计的一些建议和准则
Jun 24 Javascript
JS简单设置下拉选择框默认值的方法
Aug 20 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
Mar 17 Javascript
微信小程序中form 表单提交和取值实例详解
Apr 20 Javascript
微信小程序 开发之全局配置
May 05 Javascript
JavaScript之生成器_动力节点Java学院整理
Jun 30 Javascript
LayUI表格批量删除方法
Aug 15 Javascript
Vue中Quill富文本编辑器的使用教程
Sep 21 Javascript
日期处理的js库(迷你版)--自建js库总结
Nov 21 #Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
Nov 21 #Javascript
页面调用单个swf文件,嵌套出多个方法。
Nov 21 #Javascript
javascript中xml操作实现代码
Nov 21 #Javascript
js调用activeX获取u盘序列号的代码
Nov 21 #Javascript
15个款优秀的 jQuery 图片特效插件推荐
Nov 21 #Javascript
jQuery EasyUI API 中文文档 - TreeGrid 树表格使用介绍
Nov 21 #Javascript
You might like
php生成唯一的订单函数分享
2015/02/02 PHP
比较完整的微信开发php代码
2016/08/02 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
JavaScript设置获取和设置属性的方法
2015/03/04 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
JavaScript中this的用法及this在不同应用场景的作用解析
2017/04/13 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
基于Vue实现拖拽效果
2018/04/27 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
Python实现批量检测HTTP服务的状态
2016/10/27 Python
python 输出所有大小写字母的方法
2019/01/02 Python
Django如何简单快速实现PUT、DELETE方法
2019/07/24 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
Django 解决model 反向引用中的related_name问题
2020/05/19 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
Python入门基础之数字字符串与列表
2021/02/01 Python
CSS3 实现的加载动画
2020/12/07 HTML / CSS
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
大学信息公开实施方案
2014/03/09 职场文书
党校培训自我鉴定范文
2014/04/10 职场文书
2014年安全生产大检查方案
2014/05/13 职场文书
暑假安全教育广播稿
2014/09/10 职场文书
家庭困难证明
2014/10/12 职场文书
大学生党性分析材料
2014/12/19 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python
详解jQuery的核心函数和事件处理
2022/02/18 jQuery