JS学习梳理(三)类型和语法
- 类型
- JavaScript 有七种内置类型:null、undefined、boolean、number、string、object 和symbol,可以使用typeof 运算符来查看
- typeof返回的都是字符串
- 很多开发人员将undefined 和undeclared 混为一谈, 但在JavaScript 中它们是两码事。undefined 是值的一种。undeclared 则表示变量还没有被声明过
- 值
- 字符串反转
var a = "foo"; var c = a // 将a的值转换为字符数组 .split( "" ) // 将数组中的字符进行倒转 .reverse() // 将数组中的字符拼接回字符串 .join( "" ); c; // "oof"
- 较小数值比较
function numbersCloseEnoughToEqual(n1,n2) { return Math.abs( n1 - n2 ) < Number.EPSILON; }
- 值和引用
- null 类型只有一个值null,undefined 类型也只有一个值undefined
- 所有变量在赋值之前默认值都是undefined。void 运算符返回undefined
- 数字类型有几个特殊值, 包括NaN( 意指“not a number”, 更确切地说是“invalid number”)、+Infinity、-Infinity 和-0
- 字符串反转
- 强制转换
- 显式强制转换
var a = "Hello World"; ~a.indexOf( "lo" ); // -4 <-- 真值! if (~a.indexOf( "lo" )) { // true // 找到匹配! } ~a.indexOf( "ol" ); // 0 <-- 假值! !~a.indexOf( "ol" ); // true if (!~a.indexOf( "ol" )) { // true // 没有找到匹配! }
- 隐式强制类型转换
- || && 有意思的“操作数选择器”
function foo(a,b) { a = a || "hello"; b = b || "world"; console.log( a + " " + b ); } foo(); // "hello world" foo( "yeah", "yeah!" ); // "yeah yeah!"
- 强制转换
- 如果Type(x) 是数字,Type(y) 是字符串,则返回x == ToNumber(y) 的结果
- 如果Type(x) 是字符串,Type(y) 是数字,则返回ToNumber(x) == y 的结果
- 如果Type(x) 是布尔类型,则返回ToNumber(x) == y 的结果
- 如果Type(y) 是布尔类型,则返回x == ToNumber(y) 的结果
- 显式强制转换
- 异步和性能
- Promise.resolve保证可信任
- 调用Promise 的then(..) 会自动创建一个新的Promise 从调用返回
- 在完成或拒绝处理函数内部,如果返回一个值或抛出一个异常,新返回的(可链接的)Promise 就相应地决议
- 如果完成或拒绝处理函数返回一个Promise,它将会被展开,这样一来,不管它的决议值是什么,都会成为当前then(..) 返回的链接Promise 的决议值
- Promise.all([ .. ])
- Promise.race([ .. ])
- 生成器