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 解析xml文件
Aug 09 Javascript
Jquery实现的角色左右选择特效
May 21 Javascript
理解javascript中的回调函数(callback)
Sep 02 Javascript
javascript实现禁止复制网页内容
Dec 16 Javascript
JavaScript自定义等待wait函数实例分析
Mar 23 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
详解vue-cli开发环境跨域问题解决方案
Jun 06 Javascript
从零开始最小实现react服务器渲染详解
Jan 26 Javascript
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
js实现简单掷骰子小游戏
Oct 24 Javascript
JavaScript代码异常监控实现过程详解
Feb 17 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
Aug 14 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
ecshop 批量上传(加入自定义属性)
2012/03/20 PHP
ThinkPHP模板判断输出Present标签用法详解
2014/06/30 PHP
8个PHP数组面试题
2015/06/23 PHP
thinkphp整合微信支付代码分享
2016/11/24 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
总结十个Angular.js由浅入深的面试问题
2016/08/26 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
Vue实现手机扫描二维码预览页面效果
2020/05/28 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[00:59]PWL开团时刻DAY7——我在赶
2020/11/06 DOTA
python实现杨辉三角思路
2017/07/14 Python
Django框架实现的分页demo示例
2019/05/25 Python
python 读写excel文件操作示例【附源码下载】
2019/06/19 Python
基于Python实现剪切板实时监控方法解析
2019/09/11 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
2020/07/30 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
意大利奢侈品多品牌集合店:TheDoubleF
2019/08/24 全球购物
光声世纪笔试题目
2012/08/25 面试题
酒店前厅员工辞职信
2014/01/08 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
五好党支部事迹材料
2014/02/06 职场文书
超市活动计划书
2014/04/24 职场文书
2015年酒店工作总结范文
2015/04/07 职场文书
入党积极分子考察意见
2015/06/02 职场文书
高中升旗仪式主持词
2015/07/03 职场文书
篮球赛新闻稿
2015/07/17 职场文书
企业年会祝酒词
2015/08/11 职场文书
初中语文教学反思范文
2016/03/03 职场文书