全局属性、全局方法javascript
原创文章,转摘请注明出处:苏福:http://www.cnblogs.com/susufufu/p/5853342.htmlhtml
首先普及几个我总结的很是实用又很基础的知识:(呵呵,仅仅是学习权威指南的笔记而已)java
typeof 返回的是字符串,有8种可能:"number"、"string"、"boolean"、"object"、"function"、"undefined"、"symbol"(ES6)、宿主对象类型git
假值:false、 null、 undefined、 0 、-0 、NaN、""github
真值:除了以上的值,其余值均为真值;web
对象:除了字符串字面量、数字字面量、true、false、null、undefined以外,其余值都是对象!正则表达式
数字a 转 字符串:json
字符串s 转数字:转换失败返回NaN,忽略前置的空格,尽量多的转换数字,忽略后面的非数字内容,其中'0X'、'0x'开头的则把它当着16进制数来转换浏览器
表示一个简单的值的全局属性:安全
一个数值,表示无穷大,有Infinity和-Infinity。
表示 Not-A-Number 的值。NaN 属性的初始值就是 NaN,和 Number.NaN 的值同样。
在JavaScript中,undefined这个词有多重含义。undefined是全局对象的一个属性
null 是一个javascript字面量,表示空值,它是javascript原始值之一。
null
表明的是空指针(大多数平台下值为0x00),所以,null
的类型标签也成为了0,typeof null
就错误的返回了"object".
null 与 undefined 的区别:null是字面量,undefined是全局对象的属性
null与空对象{}的区别:我的理解为null未被分配内存,而{}分配了内存,只是值为空
var a = {};
var b = null;
a.name = 'realwall';
b.name = 'jim'; //这里会报错,b为空指针对象,不能像普通对象同样直接添加属性。
执行特定功能并返回结果的全局方法:
eval(string )eval()是一个顶级函数而且跟任何对象无关。
eval()只能直接调用,不能够间接调用,如使用变量来引用eval(),而后调用它。那么可能会发生运行时错误
eval只是一个普通的函数,只不过他有一个快速通道通向编译器,能够将string变成可执行的代码。当Function , setInterval 和 setTimeout这几个方法接收一个字符串做为参数时,内部调用了eval()方法
eval一般用在一些须要动态执行字符串,或将字符串转为javascript对象的场景,好比将json字符串转为javascript对象。
eval()函数并不会建立一个新的做用域,而且它的做用域就是它所在的做用域。能够用window.eval()的方式来把它的做用域变为全局(兼容IE8的对应方法为window.execScript)
避免在没必要要的状况下使用eval:eval() 是一个危险的函数, 它能够像拥有调用者的权力同样调用代码。若是你使用了字符串来运行eval(),那么你的代码可能被恶意方(不怀好意的人)影响, 经过在使用方的机器上使用恶意代码,可能让你失去在网页或者扩展程序上的权限。eval() 可读性差、不方便优化和调试、有性能消耗。在任何实用eval()的地方,基本均可以有通常的替代方案
它是全局方法,不与任何对象有关系。你能够用这个方法来断定一个数字是不是有限数字。isFinite 方法检测它参数的数值。他会首先尝试将参数转换为一个数值,若是参数是 NaN、Infinity、-Infinity,则返回false,其余返回 true。
isNaN(testValue)用来判断一个值是否为 NaN。注:isNaN函数包含一些很是有意思的强制转换规则;你也能够经过 ECMAScript 6 中定义的 Number.isNaN() 或者 typeof 来判断一个值是否为非数值
将参数中指定的字符串解析成为一个浮点数字并返回.parseFloat是个全局函数,不属于任何对象.
该函数经过正则表达式的方式,在须要更严格地转换float值时可能会有用: (只接受纯数字值)
var filterFloat = function (value) { if(/^(\-|\+)?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)){ return Number(value); } return NaN; }
将给定的字符串以指定基数(radix/base)解析成为整数。radix是一个2到36之间的整数值,用于指定转换中采用的基数。好比参数"10"表示使用咱们一般使用的十进制数值系统。老是指定该参数能够消除阅读该代码时的困惑而且保证转换结果可预测。当忽略该参数时,不一样的实现环境可能产生不一样的结果。
parseInt("10546", 2); //2 parseInt("546", 2); //NaN parseInt("FXX123", 16); //15 parseInt("12",13); //15 parseInt(" -17", 8); //-15 parseInt("0x11", 16); //17 parseInt("0x11", 0); //17 parseInt("0x11"); //17
在没有指定基数,或者基数为 0 的状况下,JavaScript 做以下处理:
一个更严格的方法来解析整型值:(任何不具备实际意义数字值的值均返回NaN)
filterInt = function (value) { if(/^(\-|\+)?([0-9]+|Infinity)$/.test(value)){ return Number(value); } return NaN; } filterInt('421op'); //NaN
对统一资源标识符(URI)进行编码的方法。它使用1到4个转义序列来表示每一个字符的UTF-8编码(只有由两个代理字符区组成的字符才用四个转义字符编码)。参数URI是一个完整的URI.
类型 |
包含 |
保留字符 |
; , / ? : @ & = + $ |
非转义的字符 |
字母 数字 - _ . ! ~ * ' ( ) |
数字符号 |
# |
// 编码高-低位完整字符 console.log(encodeURI('\uD800\uDFFF')); // 编码单独的高位字符抛出 "Uncaught URIError: URI malformed" console.log(encodeURI('\uD800')); // 编码单独的低位字符抛出 "Uncaught URIError: URI malformed" console.log(encodeURI('\uDFFF'));
function fixedEncodeURI (str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }
是对统一资源标识符(URI)的组成部分进行编码的方法。它使用一到四个转义序列来表示字符串中的每一个字符的UTF-8编码(只有由两个Unicode代理区字符组成的字符才用四个转义字符编码)。参数str是String. URI 的组成部分。
为了更严格的遵循 RFC 3986(它保留 !, ', (, ), 和 *),即便这些字符并无正式划定 URI 的用途,下面这种方式是比较安全的:
function fixedEncodeURIComponent (str) { return encodeURIComponent(str).replace(/[!'()]/g, escape).replace(/\*/g, "%2A"); }
用于解码由 encodeURI 方法或者其它相似方法编码的统一资源标识符(URI)。将已编码 URI 中全部能识别的转义序列转换成原字符,但不能解码那些不会被 encodeURI 编码的内容(例如 "#")
decodeURI("https://developer.mozilla.org/ru/docs/JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
// "https://developer.mozilla.org/ru/docs/JavaScript_шеллы"
用于解码由 encodeURIComponent 方法或者其它相似方法编码的部分统一资源标识符(URI)。参数encodedURI 是编码后的部分 URI