javascript|游戏开发之旅-JavaScript重新介绍( 二 )


JavaScript 还有一种内置的 Error(错误)类型 。 但是 , 如果我们继续使用上面的分类 , 事情便容易得多;所以 , 现在 , 我们先讨论上面这些类型 。
数字
根据语言规范 , JavaScript 采用“遵循 IEEE 754 标准的双精度 64 位格式”(\"double-precision 64-bit format IEEE 754 values\")表示数字 。 ——在JavaScript(除了BigInt)当中 , 并不存在整数/整型(Integer) 。 因此在处理如下的场景时候 , 您一定要小心:
console.log(3 / 2); // 1.5not 1
console.log(Math.floor(3 / 2)); // 1
一个看上去是整数的东西 , 其实都是浮点数 。 当然 , 您也需要小心这种情况:
0.1 + 0.2 = 0.30000000000000004
在具体实现时 , 整数值通常被视为32位整型变量 , 在个别实现(如某些浏览器)中也以32位整型变量的形式进行存储 , 直到它被用于执行某些32位整型不支持的操作 , 这是为了便于进行位操作 。
JavaScript 支持标准的算术运算符 , 包括加法、减法、取模(或取余)等等 。 还有一个之前没有提及的内置对象 Math(数学对象) , 用以处理更多的高级数学函数和常数:
Math.sin(3.5);
var circumference = 2 * Math.PI * r;
你可以使用内置函数 parseInt() 将字符串转换为整型 。 该函数的第二个可选参数表示字符串所表示数字的基(进制)
parseInt(\"123\" 10); // 123
parseInt(\"010\" 10); // 10
一些老版本的浏览器会将首字符为“0”的字符串当做八进制数字 , 2013 年以前的 JavaScript 实现会返回一个意外的结果:
parseInt(\"010\"); // 8 parseInt(\"0x10\"); // 16
这是因为字符串以数字 0 开头 , parseInt()函数会把这样的字符串视作八进制数字;同理 , 0x开头的字符串则视为十六进制数字 。 如果想把一个二进制数字字符串转换成整数值 , 只要把第二个参数设置为 2 就可以了:
parseInt(\"11\" 2); // 3
JavaScript 还有一个类似的内置函数 parseFloat() , 用以解析浮点数字符串 , 与parseInt()不同的地方是 , parseFloat() 只应用于解析十进制数字 。 一元运算符 + 也可以把数字字符串转换成数值:
+ \"42\"; // 42 + \"010\"; // 10 + \"0x10\"; // 16
如果给定的字符串不存在数值形式 , 函数会返回一个特殊的值 NaN(Not a Number 的缩写):
parseInt(\"hello\" 10); // NaN
要小心NaN:如果把 NaN 作为参数进行任何数学运算 , 结果也会是 NaN:
NaN + 5; //NaN
可以使用内置函数 isNaN() 来判断一个变量是否为 NaN:isNaN(NaN); // true
JavaScript 还有两个特殊值:Infinity(正无穷)和 -Infinity(负无穷):
1 / 0; // Infinity -1 / 0; // -Infinity
可以使用内置函数 isFinite() 来判断一个变量是否是一个有穷数 ,如果类型为Infinity -Infinity 或 NaN则返回false:
isFinite(1/0); // false
isFinite(Infinity); // false
isFinite(-Infinity); // false
isFinite(NaN); // false
isFinite(0); // true
isFinite(2e64); // true
isFinite(\"0\"); // true
// 如果是纯数值类型的检测 , 则返回 false:
Number.isFinite(\"0\"); // false
备注: parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符 , 直到遇上一个无法被解析成数字的字符 , 然后返回该字符前所有数字字符组成的数字 。 但是运算符 \"+\"对字符串的转换方式与之不同 ,只要字符串含有无法被解析成数字的字符 , 该字符串就将被转换成 NaN 。 可分别使用这两种方法解析“10.2abc”这一字符串 , 并比较得到的结果 , 来理解这两种方法的区别 。
字符串
JavaScript 中的字符串是一串Unicode 字符序列 。 这对于那些需要和多语种网页打交道的开发者来说是个好消息 。 更准确地说 , 它们是一串UTF-16编码单元的序列 , 每一个编码单元由一个 16 位二进制数表示 。 每一个Unicode字符由一个或两个编码单元来表示 。