声明:本文在基础篇内不分模块,因为都是需要记忆的内容,但是实际上编写是按照学习顺序进行的,也就是题号顺序变化模块就在变化
文章目录
基础篇
1.js的数据类型及其检测方式
- 值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值)
- 引用数据类型:对象(Object)、数组(Array)、函数(Function)
- typeof 后面加上要检测的数据或变量
2.js中的常见打印语句有那些,常用哪个并列出原因
- alert()
- 以字符的形式打印数据
- document.write()
- 以字符的形式打印数据
- console.log() √
- 不阻塞程序
- 不影响页面布局
- 不改变数据的类型
- 同时可以打印多个数据
- 静默打印
3.js的组成及各部分的功能
- DOM:文档对象模型,document,网页操作
- BOM:浏览器对象模型,window,浏览器的窗口操作
- ECMAScript:语法,规范,规定了js该如何书写
4.js中常见的运算符有哪些
- 算术运算符:+ - * / %
- 关系运算符:> >= < <= == === != !==
- 逻辑运算符:|| && !
- 赋值运算符:= += -= *= /= %=
- 一元运算符:++ - -
5.强制类型转换的方法有哪些,从什么类型转成什么类型
- 转数值
- parseInt(data)
- parseFloat(data)
- Math.round(data)
- Number(data)
- 转字符
- data.toString()
- data.toFixed(n)
- String()
- 转布尔
- Boolean()
6.其他类型转布尔的规则
- 字符:非空为true
- 数值:非0为true
- 函数,对象,数组,都是true
- undefined,null,NaN,都是false
7.字符转数值的规则
- 严格转换:必须全部都是数字,才能转换,否则NaN
- 非严格转换:从左向右依次检测,遇到数字就转,非数字,停止,如果第一位就是非数字,直接NaN
8.双分支和多分支语句的区别
- if和switch的区别
- if更适合处理范围
- switch更适合处理具体的值
- if的小括号内有隐式类型转换
- switch的小括号和case后,都没有隐式类型转换
9.隐式类型转换的场景
- 运算符
- if的小括号内
- isNaN
- while的小括号内
10.循环语句有哪些及其完整语法
- while(执行条件){执行语句}
- do{执行语句}while(判断条件)
- for(计数器;执行条件;计数器的改变){执行语句}
11.各个循环语句之间的区别
- while和do-while
- do-while在条件为false时,会执行一次,而while不会
- while和for
- while的三要素更灵活,更适合处理不确定次数的循环
- for的三要素更集中,更适合处理确定次数的循环
12.循环的控制关键字及其功能
- break:结束循环
- continue:跳过某次循环
13.js的三大特殊数据
- undefined
- null
- NaN
14.函数的创建和执行
- 声明式:function fn(){}
- 赋值式:var fn = function(){}
- 直接直接:fn()
- 行为执行:事件源.on事件类型 = fn
15.事件类型的分类有哪些
-
鼠标类
- 点击: click
- 双击: dblclick
- 按下: mousedown
- 抬起: mouseup
- 进入: mouseover(会触发事件冒泡) / mouseenter(不会触发事件冒泡)
- 离开: mouseout(会触发事件冒泡) / mouseleave(不会触发事件冒泡)
- 移动: mousemove
- 右键点击: contextmenu
-
键盘类
- 按下: keydown
- 点击: keypress
- 抬起: keyup
-
表单类
- 获取焦点: focus
- 失去焦点: blur
- 改变: change
- 输入: input
- 提交: submit
- 重置: reset
-
浏览器类
- 加载: load
- 滚动: scroll
- 改变大小: resize
16.函数的参数有哪些,它们之间有什么关系
- 形参:定义时
- 实参:执行时
- 形参保存了实参,实参赋值给形参
- 都是一一对应
- 形参多,多出来的则为undefined
- 实参多,用arguments
17.函数的返回值如何设置,为什么要有返回值
- return
- 为了便于将函数内部的处理结果,进行二次使用
18.什么是声明提升,如何提升
- 将var声明的变量提升到作用域最开始的位置,原位赋值
- 将function声明的函数,整体提升到作用域最开始的位置
19.作用域有哪些,访问规则是什么
- 全局
- 局部
- 作用域嵌套之后,父不能拿子,子可以拿父
20.对象的本质和意义
- 本质(组成):键值对
- 意义(作用):存储数据,编程
21.对象的分类
- 宿主:window,document
- 本地:Object,String,Number,…
- 内置:Math…
21.对象的操作语法及其应用场景
- 点语法:当对象的属性是一个具体的值
- 中括号语法:当对象的属性不是一个具体的值,是变量
22.数组的创建方式及区别
- 字面量:var arr = []
- 构造函数:var arr = new Array()
- 区别:当有且只有一个数值型数据时,字面量认为是数据,构造函数认为是长度
23.栈堆的关系
- 一对一,多对一,不能一对多
24.什么是值传递,什么是引用传递
- 值传递:复制的是值
- 引用传递:复制的是地址
25.什么是深浅拷贝,如何实现深拷贝
- 浅拷贝:只拷贝地址
- 深拷贝:只拷贝值
- 实现深拷贝:遍历复杂数据后逐个拷贝值
26.js的哪些数据是基本类型,哪些数据是复杂类型
- 基本(深拷贝):string,number,boolean,undefined,null
- 复杂(默认浅拷贝,可以深拷贝):object,array(typeof是object),function
27.如何开启严格模式
- “use strict”(建议在匿名函数内使用,在匿名函数内编写所有代码)
28.严格模式下的变更
- 变量必须先声明,再使用
- 函数的形参不允许重复
- 形参的改变不会影响arguments
- 不允许使用arguments.callee找到函数自身
- 没有明确隶属对象的函数内部的this不指向window,指向undefined
- 不允许使用0开头的数值
- 不允许使用with语句
29.ES5新增的数组的方法
- arr.indexOf() 根据数据查索引
- arr.forEach() 遍历
- arr.map() 遍历,并修改
- arr.filter() 遍历,并过滤
- arr.some() 遍历,并查询,只要有一个符合,即为true
- arr.every() 遍历,并查询,必须所有符合,才为true
- arr.reduce() 遍历,并归并
30.字符的方法
- str.indexOf() 根据数据查索引
- str.charAt() 根据索引查数据
- str.slice() 截取
- str.split() 分割
- str.replace() 替换
- str.substring() 截取
- str.substr() 截取
- str.concat() 合并
- str.match() 查询
- str.search() 查询
31.数组的排序(冒泡或选择)
- 冒泡排序(两两比较,大的放后面)
var arr = [7,6,5,4,3];
for(var i=0;i<arr.length-1;i++){
for(var j=0;j<arr.length-1-i;j++){
if(arr[</