全局函数可以直接调用,不需要在调用时指定所属对象,执行结束后会将结果直接返回给调用者。
全局内置函数有:
eval(string) 函数会将传入的字符串当做 JavaScript 代码进行执行。
语法
eval(string)
参数(string),是一个表示 JavaScript 表达式、语句或一系列语句的字符串。表达式可以包含变量与已存在对象的属性。
返回值:返回字符串中代码的返回值。如果返回值为空,则返回 undefined。
console.log(eval('2 + 2'));
// Expected output: 4
console.log(eval(new String('2 + 2')));
// Expected output: 2 + 2
console.log(eval('2 + 2') === eval('4'));
// Expected output: true
console.log(eval('2 + 2') === eval(new String('2 + 2')));
// Expected output: false
eval函数会导致网页安全问题,最好不要使用。
该全局 isFinite() 函数用来判断被传入的参数值是否为一个有限数值(finite number)。在必要情况下,参数会首先转为一个数值。
语法
isFinite(testValue)
参数
testValue
用于检测有限性(finiteness)的值。
你可以用这个方法来判定一个数字是否是有限数字。isFinite 方法检测它参数的数值。如果参数是 NaN,正无穷大或者负无穷大,会返回false,其他返回 true。
isFinite(Infinity); // false
isFinite(NaN); // false
isFinite(-Infinity); // false
isFinite(0); // true
isFinite(2e64); // true,在更强壮的 Number.isFinite(null) 中将会得到 false
isFinite("0"); // true,在更强壮的 Number.isFinite('0') 中将会得到 false
isNaN() 函数用来确定一个值是否为NaN。
语法
isNaN(value)
参数
value
要被检测的值。
返回值
如果给定值为 NaN则返回值为true;否则为false。
注意:isNaN()在执行时,会先将参数value转换成数值,然后再判断是否为NaN。
isNaN(NaN); // true
isNaN(undefined); // true
isNaN({}); // true
isNaN(true); // false
isNaN(null); // false
isNaN(37); // false
// strings
isNaN("37"); // false: 可以被转换成数值 37
isNaN("37.37"); // false: 可以被转换成数值 37.37
isNaN("37,5"); // true
isNaN('123ABC'); // true: parseInt("123ABC") 的结果是 123,但是 Number("123ABC") 结果是 NaN
isNaN(""); // false: 空字符串被转换成 0
isNaN(" "); // false: 包含空格的字符串被转换成 0
// dates
isNaN(new Date()); // false
isNaN(new Date().toString()); // true
isNaN("blabla") // true: "blabla"不能转换成数值
// 转换成数值失败,返回 NaN
建议用Number.isNaN()和x !== x两种方式代替isNaN()函数。
parseFloat() 函数解析一个参数(必要时先转换为字符串)并返回一个浮点数。
语法
parseFloat(string)
参数
string
需要被解析成为浮点数的值。
返回值
给定值被解析成浮点数。如果给定值不能被转换成数值,则会返回 NaN。
function circumference(r) {
return parseFloat(r) * 2.0 * Math.PI;
}
console.log(circumference(4.567));
// Expected output: 28.695307297889173
console.log(circumference('4.567abcdefgh'));
// Expected output: 28.695307297889173
console.log(circumference('abcdefgh'));
// Expected output: NaN
parseFloat 是个全局函数,不属于任何对象。有以下特点:
parseFloat(3.14); // 3.14
parseFloat('3.14'); // 3.14
parseFloat(' 3.14 '); // 3.14
parseFloat('314e-2'); // 3.14
parseFloat('0.0314E+2'); // 3.14
parseFloat('3.14some non-digit characters'); // 3.14
parseFloat({ toString: function() { return "3.14" } }); // 3.14
parseFloat("FF2"); // NaN
parseFloat(900719925474099267n); // 900719925474099300 精度丢失
parseFloat('900719925474099267n'); // 900719925474099300 精度丢失
parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数。
语法
parseInt(string, radix);
参数
string
要被解析的值。如果参数不是一个字符串,则将其转换为字符串 (使用 ToString抽象操作)。字符串开头的空白符将会被忽略。
radix_ 可选_
从 2 到 36 的整数,表示进制的基数。例如指定 16 表示被解析值是十六进制数。如果超出这个范围,将返回 NaN。假如指定 0 或未指定,基数将会根据字符串的值进行推算。注意,推算的结果不会永远是默认值 10!文章后面的描述解释了当参数 radix 不传时该函数的具体行为。
对于 radix 为 10 以上的,英文字母表示大于 9 的数字。例如,对于十六进制数(基数 16),则使用 A 到 F。
返回值
从给定的字符串中解析出的一个整数。
或者 NaN,当
parseInt(‘123’, 5) // 将’123’看作 5 进制数,返回十进制数 38 => 15^2 + 25^1 +3*5^0 = 38
如果 parseInt 遇到的字符不是指定 radix 参数中的数字,它将忽略该字符以及所有后续字符,并返回到该点为止已解析的整数值。parseInt 将数字截断为整数值。允许前导和尾随空格。
由于某些数字在其字符串表示形式中使用 e 字符(例如 6.022×23 表示 6.022e23 ),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。parseInt不应替代 Math.floor()。
parseInt 可以理解两个符号。+ 表示正数,- 表示负数(从 ECMAScript 1 开始)。它是在去掉空格后作为解析的初始步骤进行的。如果没有找到符号,算法将进入下一步;否则,它将删除符号,并对字符串的其余部分进行数字解析。
如果 radix 是 undefined、0 或未指定的,JavaScript 会假定以下情况:
如果第一个字符不能转换为数字,parseInt 会返回 NaN。
// 均返15
parseInt("0xF", 16);
parseInt("F", 16);
parseInt("17", 8);
parseInt(021, 8);
parseInt("015", 10); // parseInt(015, 8); 返回 13
parseInt(15.99, 10);
parseInt("15,123", 10);
parseInt("FXX123", 16);
parseInt("1111", 2);
parseInt("15 * 3", 10);
parseInt("15e2", 10);
parseInt("15px", 10);
parseInt("12", 13);
// NaN
parseInt("Hello", 8); // 根本就不是数值
parseInt("546", 2); // 除了“0、1”外,其他数字都不是有效二进制数字
// -15
parseInt("-F", 16);
parseInt("-0F", 16);
parseInt("-0XF", 16);
parseInt(-15.1, 10);
parseInt(" -17", 8);
parseInt(" -15", 10);
parseInt("-1111", 2);
parseInt("-15e1", 10);
parseInt("-12", 13);
// 4
parseInt(4.7, 10);
parseInt(4.7 * 1e22, 10); // 非常大的数值变成 4
parseInt(0.00000000000434, 10); // 非常小的数值变成 4
decodeURI() 函数能解码由encodeURI 创建或其他流程得到的统一资源标识符(URI)。
decodeURI()函数和encodeURI()函数一般配套使用,很少单独使用。
语法
decodeURI(encodedURI)
参数
encodedURI
一个完整的编码过的 URI
返回值
返回一个给定编码统一资源标识符 (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_шеллы"
encodeURI() 函数通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 (该字符的 UTF-8 编码仅为四转义序列) 由两个 “代理” 字符组成)。
语法
encodeURI(URI)
参数
URI
一个完整的 URI。
返回值
一个新字符串,表示提供的字符串编码为统一资源标识符 (URI)。
假定一个 URI 是完整的 URI,那么无需对那些保留的并且在 URI 中有特殊意思的字符进行编码。
// http://username:[email protected]:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor
console.log(
encodeURI(
"http://username:[email protected]:80/path/to/file.php?foo=316&bar=this+has+spaces#anchor"
)
);
// %E5%93%88%E5%93%88%E5%93%88%20#anchor
console.log(encodeURI("哈哈哈 #anchor"));
encodeURI 会替换所有的字符,但不包括以下字符,即使它们具有适当的 UTF-8 转义序列:
类型 | 包含 |
---|---|
保留字符 | ; , / ? : @ & = + $ |
非转义的字符 | 字母 数字 - _ . ! ~ * ’ ( ) |
数字符号 | # |
另外,如果试图编码一个非高 - 低位完整的代理字符,将会抛出一个 URIError 错误,例如:
// 编码高 - 低位完整字符 ok
console.log(encodeURI('\uD800\uDFFF'));
// 编码单独的高位字符抛出 "Uncaught URIError: URI malformed"
console.log(encodeURI('\uD800'));
// 编码单独的低位字符抛出 "Uncaught URIError: URI malformed"
console.log(encodeURI('\uDFFF'));
decodeURIComponent() 方法用于解码由 encodeURIComponent 方法或者其他类似方法编码的部分统一资源标识符(URI)。
将已编码 URI 中所有能识别的转义序列转换成原字符。
decodeURIComponent一般和encodeURIComponent 配套使用。
语法
decodeURIComponent(encodedURI)
参数
encodedURI
编码后的部分 URI
返回值
一个解码后的统一资源标识符(URI)字符串,处理前的 URI 经过了给定格式的编码。
decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B");
// "JavaScript_шеллы"
console.log(decodeURIComponent("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"));
console.log(decodeURI("JavaScript_%D1%88%D0%B5%D0%BB%D0%BB%D1%8B"));
encodeURIComponent() 函数通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个、三个或四个转义序列来编码 URI(只有由两个“代理”字符组成的字符会被编码为四个转义序列)。与 encodeURI() 相比,此函数会编码更多的字符,包括 URI 语法的一部分。
语法
encodeURIComponent(str);
参数
str
一个 string、number、boolean、null,undefined 或者任何 object。在编码之前,str参数会被转化为字符串。
返回值
原字串作为 URI 组成部分被被编码后的新字符串。
encodeURIComponent 转义除了如下所示外的所有字符:
不转义的字符:
A-Z a-z 0-9 - _ . ! ~ * ’ ( )
var set1 = ";,/?:@&=+$"; // 保留字符
var set2 = "-_.!~*'()"; // 不转义字符
var set3 = "#"; // 数字标志
var set4 = "ABC abc 123"; // 字母数字字符和空格
console.log(encodeURI(set1)); // ;,/?:@&=+$
console.log(encodeURI(set2)); // -_.!~*'()
console.log(encodeURI(set3)); // #
console.log(encodeURI(set4)); // ABC%20abc%20123 (空格被编码为 %20)
console.log(encodeURIComponent(set1)); // %3B%2C%2F%3F%3A%40%26%3D%2B%24
console.log(encodeURIComponent(set2)); // -_.!~*'()
console.log(encodeURIComponent(set3)); // %23
console.log(encodeURIComponent(set4)); // ABC%20abc%20123 (空格被编码为 %20)
结束了