1,js的基础数据类型。
简单数据类型(基础数据类型):undefined,null,boolean,number,string
复杂数据类型:object,object本质上是由一组无序的键值对组成的。
其中undefined,null,boolean,number为基本类型,object,array,function属于引用类型。
2,js的undefined与null
undefined类型只有一个值,在使用var声明变量但未对其加以初始化时,这个变量的值是undefined。
3,js显式类型转换,隐式类型转换
显式转换:转型函数 Boolean(),Number(),parseInt(),parseFloat(),.toString(), String(),
隐式转换:a,递增和递减操作符 b,一元加和减操作符 c,逻辑非操作符 与 比较操作符将任意值转换为布尔值 c,关系比较操作符
4,js函数传参形式(值传递or引用传递)
在ECMAScript中所有的函数的参数都是按值传递的。就是把函数外部的值复制给函数 内部的参数,就是把值从一个变量复制到另一个变量一样。基本数据类型的值传递如同基本类型变量的复制一样,而引用类型值得传递,则如同引用类型变量的复制一样。
基本类型值
function add(num){
num += 10;
return num;
}
var count = 20;
var result = add(count);
console.log(result); // 30
console.log(count); // 20 ,没有变化
引用类型值
function setName(obj){
obj.name = '嘉明';
obj = new Object();
obj.name = '庞嘉明';
}
var person = new Object();
setName(person);
console.log(person.name); // '嘉明'
 ̄□ ̄||这个我目前还理解不够,关于js的参数传递
------------2020-6-1 补充-------------
js函数传参形式:值传递
5,js闭包
闭包是指有权访问另一个函数作用域中的变量的函数。导致另一个函数内的变量延长生存时间,造成常驻内存。
6,js单线程还是多线程
JavaScript语言的特点是单线程,JavaScript的主要用途是与用户交互,以及操作DOM。这样单线程会避免很多复杂的同步问题。假如有两个线程,一个线程在DOM节点上添加内容,另一个线程删除这个节点,这是浏览器应该以哪个线程为准?为了利用多核CPU的计算能力,HTML5提出web worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程的控制,且不得操作DOM。所以,并没有改变JavaScript单线程的本质。
7,js垃圾回收机制
a,标记清除。当变量进入执行环境时,就标记这个变量为‘进入环境’。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到他们。当变量离开环境时,则将其标记为‘离开环境’。
垃圾收集器在运行的时候会给存储在内存上的所有变量都加上标记。然后,它会去掉环境中的变量以及被环境中的变量引用的标记。而在此后在被加上标记的变量将被视为准备删除的变。最后,垃圾收集器完成内存清除工作,销毁那些带标记的值,并回收他们所占用的内存空间。
b,引用计数
跟踪记录每个值被引用的次数,当这个值的引用次数变成0时,说明没有办法再访问这个值,就将其占用的内存空间收回来,下次再运行垃圾收集器的时候,就会释放那些引用次数为0的值所占用的内存了。
8,Promise执行顺序问题
古人云‘君子一诺千金’,‘承诺将来会执行’
9,js中apply,call,bind的区别
相同点:a,在js中,这三者都是用来改变函数的this对象的指向的。b,第一个参数都是this要指向的对象。b,都可以利用后续参数传参。
不同点:参数接收方式不同,apply可接收数组。