为什么原始类型可以使用方法和属性:
包装对象:
let num = 123;
console.log(typeof num.toString());let str = "hello world";
console.log(str.split(""));
console.log(str.length); // new String(str)
原始类型调用方法或属性的时候,程序的后台会自动将他们转换成对应的包装对象。
转换后,立即销毁:
转换成包装对象,并成功执行方法后,包装对象会立即销毁,变量又重新回到原始类型的状态
总结:永远不要主动创建包装对象
创建包装对象的构造函数可以用来做类型转换:
在开发项目的时候,我们经常会用到类型转换,例如:
DOM输入的字符串,我们希望实现数学运算,要转换成数值。
类型转换可以分成两类:
Number、parseInt的区别,Number传的参数必须是纯数字,不能有字母,parseInt可以有,但是如果字母位于第一位,则返回NaN
==
: 使用===
代替==
,既可以避免歧义,也可以提升性能各种数据类型是如何实现类型转换的呢:
逻辑与左侧的值转化为布尔值,如果为true,那么逻辑与表达式的返回值就是第二个值,如果左侧为false,那么返回值就是第一个值
逻辑或左侧的值转化为布尔值,如果为false,那么逻辑与表达式的返回值就是第二个值,如果左侧为true,那么返回值就是第一个值
每一个变量都有自己的作用域:
在作用域中嵌套作用域时,就会形成一个作用域链,更底层的作用域可以访问上层及其更上层的变量,但是上层无法直接访问底层的变量。
什么是闭包:
简单一句话概括:函数嵌套,内部函数就叫做闭包。
/*1. 函数嵌套,内部函数就是闭包2. 内部函数没有执行完成,外部函数内存空间不会被销毁
*/
function outerFun() {let n = 10function innerFun() {console.log(n)}return innerFun
}let fun = outerFun()fun() // 10
闭包有什么用:封装
将一个功能放到一个模块中
var a = (function () {var n = 10var m = 20function add() {console.log(n + m)}return add
}()
但是现在实际开发中我们会使用es6的语法来封装
总结:
下一篇:RabbitMQ之发布确认