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插件-- pasteimg使用指南
Dec 29 Javascript
jQuery中removeAttr()方法用法实例
Jan 05 Javascript
JavaScript入门基础
Aug 12 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
使用jquery.qrcode.js生成二维码插件
Oct 17 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
May 14 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 Javascript
Vue引入jquery实现平滑滚动到指定位置
May 09 jQuery
详解微信小程序-扫一扫 wx.scanCode() 扫码大变身
Apr 30 Javascript
Vue 自定义指令功能完整实例
Sep 17 Javascript
vue设置动态请求地址的例子
Nov 01 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编程与应用
2006/10/09 PHP
Windows 下的 PHP-PEAR 安装方法
2010/11/20 PHP
让codeigniter与swfupload整合的最佳解决方案
2014/06/12 PHP
thinkPHP自定义类实现方法详解
2016/11/30 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
PHP的cookie与session原理及用法详解
2019/09/27 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
学习javascript面向对象 javascript实现继承的方式
2016/01/04 Javascript
微信小程序侧边栏滑动特效(左右滑动)
2017/01/23 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
完美解决浏览器跨域的几种方法(汇总)
2017/05/08 Javascript
JavaScript运动框架 链式运动到完美运动(五)
2017/05/18 Javascript
在Debian(Raspberry Pi)树莓派上安装NodeJS的教程详解
2017/09/19 NodeJs
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
python3利用Socket实现通信的方法示例
2019/05/06 Python
python 实现单通道转3通道
2019/12/03 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
解决django的template中如果无法引用MEDIA_URL问题
2020/04/07 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
汇科协同Java笔试题
2012/03/31 面试题
法律专业实习鉴定
2013/12/22 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
国际商务专业职业生涯规划书范文
2014/01/17 职场文书
培训讲师岗位职责
2014/04/13 职场文书
实习单位指导教师评语
2014/12/30 职场文书
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫