javascript 函数初探 (二)--- 那些年的预定义函数
javascript的预定义函数:
javascript引擎中有一组可以随时调用的内建函数。
这些内建函数包括:
1. parseInt()
2. parseFloat()
3. isNaN()
4. isFinite()
5. encodeURI()
6. decodeURI()
7. encodeURIComponent()
8. decodeURIComponent()
9. eval()
=================>>>>>
黑盒函数
一般来说,当我们调用一个函数的时候,程序是不需要知道该函数的内部工作细节的。我们可以将其看作一个黑盒子,只需给他传递一些参数,便可以获取她输出返回的结果。
这种思维可以应用到任何函数中。
<<<<<=================
parseInt:
w3school解释是:parseInt() 函数可解析一个字符串,并返回一个整数。 即:parseInt(string, radix);
函数有两个调用方式
1、指定radix,这也是推荐的方式,很不幸我之前都不是这样做的
2、不指定radix,即:parseInt(string)。虽然简单,但规则很多,这也是本文阐述内容的核心。
parseInt(string, radix)
radix,表示转换的基数,也就是我们常说的2进制、8进制、10进制、16进制等。范围从2~36,但我们在JS中一般调用该方法时,基本都是以10为基数进行转换的。
如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
“string”参数应用的详细规则如下:
1)如果都是字母,返回:NaN,例:
window.onload = function testParse() {
alert(parseInt());
}
2)如果都不是字母,返回:123,例:
window.onload = function testParse() {
alert(parseInt());
}
3)如果字母和数字都存在,例:
window.onload = function testParse() {
alert(parseInt());
alert(parseInt()); // NaN
}
这里涉及到两个规则:
1)如果参数“string”,以数字开头,则取截止到第一个字母出现之前的所有数字进行转换.上例中,第一个出现的字母是‘x’,取之前的数字串,只有一个数字'1',结果就返回1
2)如果参数“string”,以字母开头,直接返回NaN.
以上描述按照ECMAScript的解释(官方翻译,很给力):
parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。
parseFloat
parseFloat() 函数可解析一个字符串,并返回一个浮点数。
该函数指定字符串中的首个字符是否是数字。如果是,则对字符串进行解析,直到到达数字的末端为止,然后以数字返回该数字,而不是作为字符串。
语法:parseFloat(string);也就是说默认是十进制的,其他的基本同上述是一样的
提示和注释
注意: 字符串中只返回第一个数字。
注意: 开头和结尾的空格是允许的。
注意: 果字符串的第一个字符不能被转换为数字,那么 parseFloat() 会返回 NaN。
isNaN
通过isNaN(),我们可以确定某个输入值是否是一个可以参与算术运算的数字。因而可以检测parseInt(),parseFloat()的调用是否成功。
isNaN(NaN) // true
isNaN() // false
isNaN(1.45) // false
isNaN('abc123') // true
该函数也会试图将其接受的参数转化为数字
isNaN(') // false
isNaN('abc123') // true
NaN === NaN // false
isFinite
isFinite()可以检测输入是否是一个即非Infinity也非NaN的数字。
isFinite(InFinity) // false isFinite(-Infinity) // false isFinite() // true isFinite(1e309) // false
javascript 编码问题
本地 / Unicode
你可能对“本地”有点迷惑。刚开始,我也不理解,应该是编码之间转换才对。因为本地字符有编码,那么把这个编码转换成 Unicode 编码的说法很合理。其实,所有国家字符的 Unicode 编码都是确定的,无论是你输入的是哪国语。
Unicode 十进制和十六进制编码分别为:
例子lizi
例子lizi
本地到 Unicode 转换的 JavaScript 代码如下所示:
function nativeToUnicode(str) {
var des = [];
; i < str.length; i++)
des.push("&#" + str.charCodeAt(i) + ";");
//des.push("&#x" + str.charCodeAt(i).toString(16) + ";");
return des.join("");
}
Unicode 到本地转换的 JavaScript 代码如下所示:
function unicodeToNative(str) {
var src = str.match(/&#(\d+);/g);
if (src != null) {
var des = [];
; i < src.length; i++)
des.push(String.fromCharCode(src[i].replace(/[&#;]/g, "")));
return des.join("");
}
return "";
}
说明:
- String.charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。
- String.fromCharCode() 方法可接受一个指定的 Unicode 值,然后返回一个字符串。
本地 / UTF-8
UTF-8 是 Unicode 的实现方式之一,把定长编码改成变长的,减少了存储和传输的开销。从下面示例可以看到,中文是编码,而对用一个字节就能表示的英文字符,没有变化。
UTF-8 编码为:
例[
本地转换 UTF-8 的 JavaScript 代码如下所示:
function navtiveToUTF8(str) {
) { ).replace(/(%u)(\w{})/gi, "&#x$2;") });
}
UTF-8 转换本地的 JavaScript 代码如下所示:
function utfToNative(str) {
return unescape(str.replace(/&#x/g, '%u').replace(/;/g, ''));
}
说明:
- escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
- unescape() 函数可对通过 escape() 编码的字符串进行解码。
本地 / ASCII
ASCII 码转换或不转换 ASCII 的编码为:
\u4f8b\u5b50lizi
\u4f8b\u5b50\u006c\u0069\u007a\u0069
本地转换 ASCII 的 JavaScript 代码如下所示:
function nativeToASCII(str, isIgnoreLetter) {
var character = str.split("");
var ascii = [];
; i < character.length; i++) {
));
) {
);
charAscii = ) + charAscii;
ascii.push("\\u" + charAscii);
}
else {
ascii.push(character[i]);
}
}
return ascii.join("");
}
ASCII 转换本地的 JavaScript 代码如下所示:
function asciiToNative(str) {
var character = str.split("\\u");
];
; i < character.length; i++) {
var code = character[i];
res += String.fromCharCode(parseInt(, )));
) {
res += code.substring(, code.length);
}
}
return res;
}
本地 / URI 编码
URI 编码不用以上编码,它的主要是出于安全性考虑,让链接的内容不能一目了然地看到是什么,防止恶意的偷看者。下面是 cnblogs 的“找找看”检索链接,对其进行编码。
示例 4:
http://zzk.cnblogs.com/s?w=例子lizi&t=
URI 编码和组件编码分别为:
http://zzk.cnblogs.com/s?w=%E4%BE%8B%E5%AD%90lizi&t=
http%3A%2F%2Fzzk.cnblogs.com%2Fs%3Fw%3D%E4%BE%8B%E5%AD%90lizi%26t%3D
说明:
- encodeURI() 函数可把字符串作为 URI 进行编码。
- decodeURI() 函数可对 encodeURI() 函数编码过的 URI 进行解码。
- encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。
- decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。
eval()函数请见下一篇 (。・_・)/~~~
详情请见==============》》》 http://www.cnblogs.com/liuning8023/archive/2012/12/09/2810518.html
javascript 函数初探 (二)--- 那些年的预定义函数的更多相关文章
- Java8学习笔记(二)--三个预定义函数接口
三个函数接口概述 JDK预定义了很多函数接口以避免用户重复定义.最典型的是Function: @FunctionalInterface public interface Function<T, ...
- PHP-自定义数组-预定义数组-自定义函数-预定义函数
(1)自定义数组 —— 项目中的重点 (2)PHP预定义数组 —— 重点&难点 (3)自定义函数 —— 了解 (4)PHP预定义函数 —— 项目中的重点 1.自定义数组 数组:array,一个 ...
- STL算法设计理念 - 预定义函数对象
预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象 1)使用预定义函数对象: #include <iostream> #include <cstdio> #i ...
- C++STL 预定义函数对象和函数适配器
预定义函数对象和函数适配器 预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含. 1使用预定义函数对象: void ...
- Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216 java c# php js.docx
Atitit.跨平台预定义函数 魔术方法 魔术函数 钩子函数 api兼容性草案 v2 q216 java c# php js.docx 1.1. 预定义函数 魔术方法 魔术函数是什么1 1.2. & ...
- javascript 函数初探 (一)--- 神马是函数
神马是函数? 所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,以便与之后的调用.下面,我们来示范以下函数的声明: function sum(a, b){ var c = ...
- JavaScript内置的预定义函数
javascript引擎中有一组可供随时调用的内建函数.这些内建函数包括 parseInt() 将收到的任何输入值转换成整数类型输出,如果转换失败,返回NaN parseFloat() 功能基本与p ...
- javascript 预定义函数
parseInt() parseFloat() isNaN() isFinite() encodeURI() decodeURI() encodeURIComponent() decodeURICom ...
- 【摘录自MDN】预定义函数
JavaScript语言有好些个顶级的内建函数: eval() eval()方法会对一串字符串形式的JavaScript代码字符求值. uneval() uneval()方法创建的一个Object的 ...
随机推荐
- Security5:Execute AS 和 impersonate 权限
principal 是统称,包括login,user,role等,可以向作为安全主体的用户授予权限,principal分为server level和database level. 登录名是Server ...
- EF-DbUpdateException--实体类和数据库列不对应的解决方案
错误信息 1.VS实体类里面的字段 2数据库里面的字段 猜测是因为字段数不匹配导致的 3删除多余字段 5.结果 错误信息贴上: -------------------------Log_Header- ...
- ASP.NET MVC5 网站开发实践 - 概述
前段时间一直在用MVC4写个网站开发的demo,由于刚开始学所有的代码都写在一个项目中,越写越混乱,到后来有些代码自己都理不清了.1月26日晚上在群里跟@怒放 他们讨论这个问题,结论是即使只是一个小d ...
- Android 文件读写
一.分类 文件读写作为Android四大数据存储方式之一,又分为内部存储和外部存储两种: (1)内部存储(Internal storage): 总是可用. 文件默认情况存储在/data/data/包名 ...
- 前端工程师技能之photoshop巧用系列第二篇——测量篇
× 目录 [1]测量信息 [2]实战 [3]注意事项 前面的话 前端工程师使用photoshop进行的大量工作实际上是测量.本文是photoshop巧用系列第二篇——测量篇 测量信息 在网页制作中需要 ...
- JavaScript之自我总结篇
最近在看汤姆大叔的"深入理解JavaScript系列",写得真的不错,对于我而言特别是12章到19章,因为大叔研究的点,就主要是从底层来研究JavaScript为什么会出现钟种特有 ...
- [c++] Operator overloading
c++的操蛋属性:自己为一档,空一档,其他随意. UB_stack a; UB_stack b = a; // copy auto c = a; auto d {a}; // (or auto d = ...
- 使用Spire组件抛出异常The type initializer for 'spr857' threw an exception
使用Spire组件抛出异常The type initializer for 'spr857' threw an exception 我使用免费的Spire.Xls组件尝试去转换Excel文档到PDF文 ...
- UML中的六大关系(转)
UML定义的关系主要有六种:依赖.继承.关联.实现.聚合和组合.这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑.这里给出这六种主要UML关系的说明和类图描述, ...
- Front End Developer Questions 前端开发人员问题(三)JavaScript部分
问题来源:http://markyun.github.io/2015/Front-end-Developer-Questions/ 三.javascript1.介绍JavaScript的基本数据类型. ...