ES5部分


一句话的事情

  • 同名参数问题 function(a,a){console.log(a);取第二个参数}
  • arguments是对象不是数组 arguments.callee 返回对应的原函数 严格模式禁用
  • IIFE (function(){}()) (function(){})() 第一种比较好
  • eval 参数是字符串则会执行 否则报错。参数是数字则原样输出。会更改当前作用域 有安全风险 不建议使用。可以用别名调用 此时作用于是全局作用域。
  • 数组可以更改length属性并且有效
  • 数组可以用delete删除某个数组项 此时为空位 但不影响length长度 但是遍历的时候会自动跳过空位。也可以手动设置为空位 空位与undefined不同。
  • 指数运算符 2**4 表示2的4次方
  • 二进制运算符只针对整数 返回值也只为整数|、&、~、<<、>>、>>>、^
  • ?Object的原型对象里面的方法磁能被实例调用
  • 基本字符串不是字符串对象,但是基本字符串需要调用字符串对象的时候会被转成字符串对象,但用instanceof去判断的时候依旧为false,因为调用结束后,这个临时对象就会被销毁。这就叫原始类型与实例对象的自动转换。自动转换生成的包装对象是只读的,无法修改。
let str1 = "123"
let str2 = new String(str1);
console.log(str1 === str2);//false 这两种方式 效果不一样let arr1 = [1,2]
let arr2 = new Array(arr1);
console.log(arr1 === arr2);//false 这两种方式 效果不一样 建议使用字面量let obj1 = {a:1};
let obj2 = new Object(obj1);
console.log(obj1 === obj2)//true 这两种方式效果一样
复制代码
  • JavaScript 提供了一个内部数据结构,用来描述对象的属性,控制它的行为,比如该属性是否可写、可遍历等等。这个内部数据结构称为“属性描述对象”
  • 存取器(依赖于内部属性)
var obj ={$n : 5,get next() { return this.$n++ },set next(n) {if (n >= this.$n) this.$n = n;else throw new Error('新的值必须大于当前值');}
};obj.next // 5obj.next = 10;
obj.next // 10obj.next = 5;
// Uncaught Error: 新的值必须大于当前值
复制代码

continue、break与label标签的组合使用

top:for (var i = 0; i < 3; i++){for (var j = 0; j < 3; j++){if (i === 1 && j === 1) break top;//此处跳出双层循环//if (i === 1 && j === 1) continue top;此处跳出内层循环 进入外层循环console.log('i=' + i + ', j=' + j);}}
复制代码

实例对象与 new 命令

new命令执行时,构造函数内部的this,就代表了新生成的实例对象。

使用new命令时,它后面的函数依次执行下面的步骤。

1、创建一个空对象,作为将要返回的对象实例。

2、将这个空对象的原型,指向构造函数的prototype属性。

3、将这个空对象赋值给函数内部的this关键字。

4、开始执行构造函数内部的代码。

var Vehicle = function () {this.price = 1000;
};var v = new Vehicle();  //此时this指向这个新的实例对象
v.price // 1000
复制代码

new.target 指向当前函数

function f() {console.log(new.target === f);
}f() // false
new f() // true 必须是new的情况下 函数内部的new.target才是当前的函数
复制代码

数据类型和分辨

字符串

数值(NaN、Infinity)

布尔值(false、undefined、null、0、''、""、NaN 为false 其他都为true)

对象(数组、对象、函数)

undefined(表示为未定义)

null(表示为空)

1、typeof 表示未经计算的操作数的类型

字符串(string)、数值(number)、布尔值(boolean)、对象(object)、undefined(undefined)、null(object)

其他

函数(function)、未声明的变量(undefined)、数组(object)

2、instanceof 用于测试是否出现在原型链中的任何位置

var obj = Object(1);
obj instanceof Object // true
obj instanceof Number // true
复制代码

错误处理机制

1、error对象和属性

var err = new Error('出错了');
console.log(error.name + ': ' + error.message+':'+error.stack);
//仅message是标准属性
复制代码

2、Error的其他派生对象

SyntaxError对象是解析代码时发生的语法错误。

Uncaught SyntaxError: Invalid or unexpected token

ReferenceError对象是引用一个不存在的变量时发生的错误。

Uncaught ReferenceError: unknownVariable is not defined

RangeError对象是一个值超出有效范围时发生的错误。

Uncaught RangeError: Invalid array length

TypeError对象是变量或参数不是预期类型时发生的错误。

Uncaught TypeError: number is not a func

URIError对象是URI相关函数的参数不正确时抛出的错误

URIError: URI malformed

EvalError对象是eval函数没有被正确执行时,会抛出EvalError错误。目前不使用,仅做兼容用。

3、自定义错误

function UserError(message) {this.message = message || '默认信息';this.name = 'UserError';
}UserError.prototype = new Error();
UserError.prototype.constructor = UserError;
复制代码

4、其他

  try {throw '出错了!';} catch(e) {console.log('捕捉到内部错误');throw e; // 遇到throw会延迟到finally结束再执行//return true; 遇到return会延迟到finally结束再执行} finally {return false; // 直接返回 则不执行throw e 也不会执行return true}
复制代码

console对象

console.log()

console.info() 在输出信息的前面,加上一个蓝色图标。

console.debug() 在控制台输出调试信息,默认不显示,打开显示级别为verbose。

console.warn() 最前面加一个黄色三角,表示警告。

console.error() 在最前面加一个红色的叉,表示出错。

console.table() 可以将某些符合类型数据用表格表现出来。

console.count() 用于计数,输出它被调用了多少次,可接受参数用于分类计算。

console.dir() 用于输出对象。

console.diexml() 用于以目录树的形式,显示 DOM 节点。

console.assert() 用于条件判断,不满足条件就显示错误,但不中断程序执行。

console.time(),console.timeEnd() 用于计时,参数名是计时名

console.group(),console.groupEnd(),console.groupCollapsed() 用于将显示的信息分组 console.trace() 显示当前执行的代码在堆栈中的调用路径 console.clear() 控制台清屏


某些常用方法

1、Number专题

将一个数转为指定位数的小数,然后返回这个小数对应的字符串 tofixed

将一个数转为科学计数法形式 toExponential

isNaN、isFinite

2、Object专题

实例方法 Object.prototype.hasOwnProperty

删除对象某个属性 delete objName.attributeName

判断某属性是否属于某对象 attributeName in objName

判断某属性是否属于某对象本身 不包括继承 objName.hasOwnProperty(attributeName)

属性的遍历 包括可遍历的继承属性 for(var i in objName){ objName[i] }

判断对象是什么类型的对象 Object.prototype.toString

静态方法

返回一个数组 包含了该对象自身的所有属性名

Object.keys()   //只列出可枚举属性
Object.getOwnPropertyNames()    //可列出所有属性
Object.create(objName) //创建实例对象
复制代码

其他

Object()

let obj = Object("hello world");//将string、number、boolean转为对象
obj instanceof Object   //true
obj instanceof String   //true
obj === "hello world"   //false
obj == "hello world"    //truelet obg = Object([1,2]);//原本是对象的函数、数组、对象不作处理 所以全等
obj === [1,2]           //true
复制代码

3、函数专题

获取函数名

let f3 = function myName() {};
f3.name // 'myName'
复制代码

获取参数个数

function f(a, b) {}
f.length // 2
复制代码

获取函数的源码 toString

function f() {a();b();c();
}f.toString()
// function f() {
//  a();
//  b();
//  c();
// }
复制代码

4、转类型专题

?对象转数组let arr = Array.prototype.slice.call(arguments)

Number 比较严格 "123ab"转成NaN

String

Boolean

parseInt 相比Number 没那么严格 "123ab"也可以转成123

parseFloat

5、遍历专题

数组遍历for、while、foreach、map

对象遍历for...in

6、数组专题

静态方法

Array.isArray(arrName)

实例方法

push、pop、join、shift(删除数组第一个元素并返回该元素)、unshift(往数组第一位插入一个元素并返回插入后的长度)、concat(返回拼接的数组 不改变原数组)、reverse(颠倒数组顺序 改变原数组)、slice(提取数组的一部分 不改变原数组)、splice(删除数组的一部分 改变原数组)、sort(默认按字典排序 如传函数function(a,b){} 则当返回值大于0 则a在b后面)、indexOf、lastIndexOf、reduce、reduceRight

map 有返回值

var numbers = [1, 2, 3];var newArr = numbers.map(function (n) {return n + 1;
});
//newArr = [2, 3, 4]
//numbers = [1,2,3] 原数组不变
复制代码

foreach 没有返回值 只是处理

filter 过滤数组成员 保存return为true的数组成员

[1, 2, 3, 4, 5].filter(function (elem) {return (elem > 3);
})
复制代码

some 有一个为true 就返回true

var arr = [1, 2, 3, 4, 5];
arr.some(function (elem, index, arr) {return elem >= 3;
});
复制代码

every 每个都返回true 才返回true

var arr = [1, 2, 3, 4, 5];
arr.every(function (elem, index, arr) {return elem >= 3;
});
复制代码

7、String专题

返回指定位置的字符,参数是从0开始编号的位置。 charAt(index)

连接两个字符串,返回一个新字符串,不改变原字符串。 str1.concat(str2)

从原字符串取出子字符串并返回,不改变原字符串 str.slice(index1,index2)

从原字符串取出子字符串并返回,不改变原字符串 str.substr(index,length)

字符串转数组 str.split('&',sum)

去除字符串两端的空格,返回一个新字符串,不改变原字符串。 str.trim()

str.indexOf('b')、str.lastIndexOf('a')`

转为小写、转为大写 toLowerCase()、toUpperCase()

匹配字符串 返回一个数组 res.index表示第一次匹配的位置 res.input表示原始字符串let res = str.match('at')

匹配字符串 返回第一次匹配的位置str.search('at')

匹配字符串 并且替换所有匹配的字符串 str.replace(/at/g,'xt')

7、Math专题

Math.abs() 绝对值

Math.ceil() 向上取整

Math.floor() 向下取整

Math.max() 最大值

Math.min() 最小值

Math.pow() 指数运算

Math.sqrt() 平方根

Math.log() 自然对数

Math.exp() e的指数

Math.round() 四舍五入

Math.random() 随机数

8、Date专题

普通函数

返回当前时间 Date()

构造函数

默认调用toSting方法 let date = new Date()

其他

wangdoc.com/javascript/…

9、RegExp专题

wangdoc.com/javascript/…

两种创建方式

var regex = /xyz/;
var regex = new RegExp('xyz');
复制代码

实例属性

regex.lastIndex 表示下一次开始搜索的位置 仅对同一个正则表达式
regex.source    返回正则表达式 不包括斜杠
复制代码

实例方法 regex.test(str) regex.exec(str)

10、JSON专题

JSON.stringify 方法用于将一个值转为 JSON 字符串。

JSON.parse 方法用于将 JSON 字符串转换成对应的值。


ES6部分

对象的扩展

1、对象的属性和方法的不同写法

let a="1";
let b="total";
let c="num";
let obj={a, sum(){console.log("funny");},[b](){},[c]:"true"
}
复制代码

转载于:https://juejin.im/post/5bfe401151882558ae3c204b

JS查漏补缺(自用版)相关推荐

  1. 前端面试查漏补缺--(一) 防抖和节流

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  2. java怎么快速补缺_Java基础查漏补缺(1)

    Java基础查漏补缺 String str2 = "hello"; String str3 = "hello"; System.out.println(str3 ...

  3. 前端面试查漏补缺--(二) 垃圾回收机制

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  4. 前端面试查漏补缺--(三) 跨域及常见解决办法

    前言 本系列最开始是为了自己面试准备的.后来发现整理越来越多,差不多有十二万字符,最后决定还是分享出来给大家. 为了分享整理出来,花费了自己大量的时间,起码是只自己用的三倍时间.如果喜欢的话,欢迎收藏 ...

  5. 30 分钟 HTTP 查漏补缺之 Vary

    写在前面 最近抽空参加了几场大厂的面试,突然发现一个现象,就是不论面试偏服务端的职位还是偏客户端的职位,不论面试的 5 年以上的高级职位,还是 3 年左右的中级职位,面试官开头所问问题必然是关于 HT ...

  6. 查漏补缺:Java10之后,var成为关键字了吗

    Java 10引入了一个新功能:局部变量类型推断(LVTI).对于局部变量,可以使用 "var" 代替实际类型,也就是像js一样,可以通过 var 定义变量.那么 var 是新增加 ...

  7. 【C++后台开发面经】面试总结第八波:整个知识的查漏补缺

    前言 面试总结第八波,面试了腾讯.百度.阿里.虎牙直播等几个公司,然后总结了这一波面经,主要针对前面总结的那些,在面试时,有些被问到了,所以进行的一个查漏补缺总结. 1.C++ unique_ptr的 ...

  8. 前端查漏补缺 全知识点合集(更新中9.3)

    该篇文章用于本人查漏补缺,会有大量知识点,不定期更新,有人愿意看就随便看看. HTML 浏览器的运行机制: 构建DOM树(parse):渲染引擎解析HTML文档,首先将标签转换成DOM树中的DOM n ...

  9. Java查漏补缺(08)关键字:static、单例设计模式、理解main方法、类的成员之四:代码块、final关键字、抽象类、接口、内部类、枚举类、注解、包装类

    Java查漏补缺(08)关键字:static.单例设计模式.理解main方法.类的成员之四:代码块.final关键字.抽象类.接口.内部类.枚举类.注解.包装类 本章专题与脉络 1. 关键字:stat ...

最新文章

  1. 模仿并超越人类围棋手,KL正则化搜索让AI下棋更像人类,MetaCMU出品
  2. docker探索-使用docker service管理swarm(十一 )
  3. 黑马程序员-Java基础知识预备之Java流程控制与数组
  4. Android使用SAX解析XML(6)
  5. python标准库os的方法_Python中标准库OS的常用方法总结大全
  6. 【SQL编程】Greenplum 数据库通过 timestamp 类型字段值实现数据的(日期时段筛选+时间时段筛选)跨天时段及不跨天时段SQL详情
  7. 开直播辣!生成对抗网络全脉络梳理!
  8. linux服务器健康检查,Linux 检查硬盘健康状态
  9. 02-linux下 yum安装R环境和Rserve安装
  10. android自定义弹出框样式实现
  11. 【 D3.js 入门系列 --- 7 】 理解 update, enter, exit 的使用
  12. 深度缓冲区,RenderQueue、ZWrite和ZTest
  13. 为ui中的面板添加枚举类型脚本与json来保存信息
  14. 机器学习—模型超参数调优之网格搜索与随机搜索
  15. 工时测量有哪些方法,传统测量太繁琐?VIOOVI工时分析软件强势来袭!
  16. 微生物的质谱鉴定原理
  17. MSC-VO: 基于曼哈顿和结构约束的视觉里程计(CVPR 2021)
  18. [论文阅读] TGANet: Text-guided attention for improved polyp segmentation
  19. tolua学习资料汇总贴
  20. 九:什么是热部署,为什么要用这个?

热门文章

  1. python学习之网络编程
  2. Java对象创建、分配、布局、访问小析(HotSpot虚拟机)(二)
  3. Maven 配置使用小技巧
  4. Unity GUI屏幕自适应
  5. 中国五大顶级域名9月第一周新增3.2万 美国净减7.6万个
  6. Windows 7镜像坎坷之路 - 都是Daemon Tools惹得祸
  7. 0day影响 Chrome和 Safari,谷歌不修复
  8. 研究员轻松劫持2.8万台打印机
  9. 位于地下88米,一晚6000块,上海这家酒店房间内竟还有玄机!
  10. 2018.11.05-4028-撸串(string)