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 相关文章推荐
jQuery入门第一课 jQuery选择符
Mar 14 Javascript
如何获取select下拉框的值(option没有及有value属性)
Nov 08 Javascript
js+jquery实现图片裁剪功能
Jan 02 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
laypage分页控件使用实例详解
May 19 Javascript
AngularJS过滤器filter用法实例分析
Nov 04 Javascript
拖动时防止选中
Feb 03 Javascript
解决给dom元素绑定click等事件无效问题的方法
Feb 17 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
vue实现滑动切换效果(仅在手机模式下可用)
Jun 29 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
js实现小星星游戏
Mar 23 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP设计模式之模板方法模式实例浅析
2018/12/20 PHP
javascript json2 使用方法
2010/03/16 Javascript
JAVASCRIPT实现的WEB页面跳转以及页面间传值方法
2010/05/13 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
理解javascript中的with关键字
2016/02/15 Javascript
jQuery+formdata实现上传进度特效遇到的问题
2016/02/24 Javascript
js添加绑定事件的方法
2016/05/15 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
TypeScript中的方法重载详解
2019/04/12 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
2019/05/22 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python中的异常处理学习笔记
2015/01/28 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
利用Python生成文件md5校验值函数的方法
2017/01/10 Python
python实现本地图片转存并重命名的示例代码
2018/10/27 Python
Python Unittest根据不同测试环境跳过用例的方法
2018/12/16 Python
Django重设Admin密码过程解析
2020/02/10 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
Python ellipsis 的用法详解
2020/11/20 Python
css3简单练习实现遨游浏览器logo的绘制
2013/01/30 HTML / CSS
Gap英国官网:Gap UK
2018/07/18 全球购物
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
入党积极分子培养联系人意见
2015/08/12 职场文书
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle