一、数据类型的转换
按理来说这个是很简单的内容 但我觉得ta值得记一下
常用的数据类型转换:
Number(数字) 涉及到整型与浮点型用到的方法——Number()、parseFloat()、parseInt()
String(字符串) 应用到的方法String()此函数用于对字符串的相应处理、toString()此方法用与字符串类型的转换
Boolean(布尔)用于将值转化为布尔值 除了“0/NaN/空字符串/null/undefined”五个值是false,其余都是true
二、JS的垃圾回收机制
JavaScript中的垃圾收集器会自动释放程序不再使用的内存。它通过定期检查内存堆中不再被程序引用的对象来实现这一点。如果发现对象不可达,则将其标记为垃圾收集,并释放其内存。当对象值null或者无指向时它就会被打上标记 如果不及时释放回收会导致内存泄漏 如闭包就很好的诠释的这个问题如果不及时释放就会造成内存堆积
三、JS栈和堆的概念
栈和堆是很重要的两个概念 栈是一种线性数据具有先进后出的特点 堆是一种树状结构 用于动态分配内存
JS中的原始类型存储在栈中,而对象和数组存储在堆中
四、浅拷贝与深拷贝
简单的理解就是一个深一个浅 但又没这么简单 浅拷贝只是复制对象的第一层 深拷贝则复制整个对象
浅拷贝 有两种方式Object.assign()可以将所有可枚举属性从一个或多个源对象复制到目标对象。ta返回目标对象,第二种就是扩展运算符“...”
深拷贝比较复杂一点 可以通过将对象转换为 JSON 字符串,然后将其解析回 JavaScript 对象,JSON.parse() 和 JSON.stringify()
const obj = { a: 1, b: { c: 2 } };
const copy = JSON.parse(JSON.stringify(obj));
console.log(copy); // { a: 1, b: { c: 2 } }
五、arguments
arguments是js中的一个特殊对象 它所包含的是函数调用时传递的所有参数 可以理解为它是你传的参数然后整合成了一个类数组对象 它并不能使用所有的数组方法 当然可以将arguments转换成一个真正的数组
使用Array.prototype.slice.call(arguments)方法 这个方法将arguments对象作为slice方法的上下文,并返回一个包含所有参数的新数组。
六、JS严格模式
严格模式是JS的一种执行模式 它强制执行更严格的语法和错误处理 在此模式下一些不安全的操作将会被禁止 并在一些情况下代码将跑的更快
使用方法是在文件或者函数开头添加“use strict”开启 开启后 一些常见的错误将会被捕获并抛出错误
七、函数声明提升
函数声明提升是指函数声明会被提升到当前作用域的顶部 这样就不会出现声明之前调用函数报错的情况了
值得注意的是函数声明与函数表达式是两种声明方式函数表达式不能被提升
myFunction();
function myFunction() {
console.log("Hello World!");
}
//函数声明
myFunction();
var myFunction = function() {
console.log("Hello World!");
}
//函数表达式