JS数据类型
Number
String
Boolean
Object(data对象、正则对象、array对象、函数对象等)
Symbol 是ES6引入的一种新的原始数据类型,用于表示独一无二的值;主要用于当做属性名,
防止属性名重名,因为用字符串当属性名很容易就会在不经意间造成重名。
js常见错误类型
ReferenceError:引用变量错误
TypeError:数据类型错误
SyntaxError:语法错误
instanceof其实是一种符号
它和我们常见的=、>、<等是同一类的,都是一种运算表达符号,
但是它和其他的符号不同的就是他是一个由多个英文字母组成的,
它是在java、php里面常用的一个二元操作符,是Java的保留关键字,
主要作用就是来判断左边的对象是否是它右边对象的实例。
[[Prototype]] 存在于所有的对象上
prototype 存在于所有的函数上
原型链继承模式
优点:子类能复用父类的属性和方法。
缺点:子类实例化的对象会对父类原型上引用类型值有影响;不能多继承;
子类的实例无法向父类构造函数传递参数。
借用构造函数继承模式
优点:解决了原型链继承无法传参的缺陷。(能传参)
缺点:只能继承父类构造函数内的属性和方法,不能继承父类原型上的属性和方法。
组合继承
优点:能传参,能复用
缺点:调用了两次父类构造函数,浪费内存,影响性能。
原型式继承
优点:解决了组合继承中,实例和原型中都有相同的属性和方法。
缺点:拥有原型链的通病。
寄生式组合继承
优点:能传参,能复用,扩展性强(Object.create);
实例中的属性和方法也不会和原型的属性方法重复。
函数复用
写一个通用的方法来避免每次重复写大段的代码
var const let之间对比
var声明变量存在变量提升,let和const不存在变量提升;
let、const都是块级局部变量,顾名思义,就是只在当前代码块起作用;
const 的特性和 let 完全一样,不同的只是:
1)声明时候必须赋值;2)只能进行一次赋值,即声明后不能再修改;
同一作用域下let和const不能声明同名变量,而var可以.
什么是变量提升?
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。 JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
undefined可以翻译为不明确,not defined可以翻译为未定义
对象、实例对象、函数对象
万物皆对象。
实例对象--用new关键字调用构造函数得到的对象.
函数对象--将函数当成对象来使用.
数组的方法
push 向数组末尾添加元素,并返回新的数组长度
pop 删除数组末尾的元素,并返回被删的那个元素
shift 删除数组第一项,并返回被删的那个元素
upshift 向数组开头添加一个或者多个元素,并返回新的数组长度
splice 用于删除、添加、替换数组的元素
sort 对数组元素进行排序
reverse 颠倒数组中元素顺序
fill 填充数组
slice 用于截取数组指定下标的元素,并返回新的数组元素集合
map 遍历数组,对数组进行一系列操作,并返回新的数组集合
forEach 遍历数组,对数组进行一系列操作,并返回新的数组集合
reduce 实现迭代数组所有项,然后构建一个最终的返回值
filter 过滤筛选数组元素,并返回新的数组集合
indexOf 匹配元素是否在某个数组内,没有返回-1
lastIndexOf 从后往前匹配元素是否在某个数组内,没有返回-1
toString 将数组转换为字符串,并返回该字符串
concat 用于连接一个或多个数组,并返回新的数组集合
join 将数组转换为字符串,以规定的连接符连接,并返回字符串
字符串的方法
charAt 返回在指定位置的字符
charCodeAt 返回指定位置字符的Unicode
concat 连接字符串
indexOf 检索字符串
match 找到一个或多个正则表达式的匹配
replace 替换与正则表达式匹配的子串
search 检索与正则表达式相匹配的值
slice 提取字符串的片段,并返回被提取的片段
split 将字符串分割为 字符串数组
toLowerCase 字符串转为小写
toUpperCase 字符串转为大写
substr 从起始检索提取字符串中指定数目的字符
substring 提取字符串中两个指定的索引之间的字符
typeof和instanceof的作用与区别
1、typeof只能检测到1)、基础数据类型;2)、函数
缺点:无法检测{}、[]、null
2、instanceof用于判断前者是否是后者的实例对象,返回true or false
this的指向
只看函数执行的时候,函数前面是否有调用者,有的话指向调用者,
没有在浏览器中指向window,严格模式下指向undefined。
js事件机制eventloop(重点!!!)
跨域
由于Javascript对于安全访问的考虑,不允许跨域调用其他页面。
什么时候会产生跨域?
同一域名不同端口号;
同一域名不同协议;
域名与其对应的IP;
主域名与子域名;
子域名与子域名。