为了应付古老的面试和js语言各种糟粕
古老面试题
送你 43 道 JavaScript 面试题
jsliang 的 2019 面试准备
五轮阿里面试题及答案
前端面试之webpack篇
2019前端最全面试题
【周刊-2】三年大厂面试官-前端面试题(偏难)
2018大厂高级前端面试题汇总
前端面试题2019持续整理汇总
2019前端面试题–这样准备,拿不到offer算我输
腾讯大厦与我有个约定(面试精华帖)
====css
CSS经典面试题(史上最全,持续更新中…)
vue
30 道 Vue 面试题,内含详细讲解(涵盖入门到精通,自测 Vue 掌握程度)
公司要求会使用框架vue,面试题会被问及哪些?
「面试题」20+Vue面试题整理(持续更新)
Vue 面试题汇总(持续更新中…)
很全面的vue面试题总结
「面试题」20+Vue面试题整理
http
11道浏览器原理面试题
####vue面试题
react 的面试题
35 道咱们必须要清楚的 React 面试题
2019年17道高频React面试题及详解
必须要会的 50 个 React 面试题
那些年,自己没回答上来的react面试题
React 16 新特性全解(上)
React 328道最全面试题(持续更新)
js的各种框架必须了解的
react http://www.cnblogs.com/coding4/p/5964973.html
angularjs http://www.cnblogs.com/coding4/p/5549812.html
angularjs面试背的。http://www.cnblogs.com/coding4/p/6529761.html
backbone http://www.cnblogs.com/coding4/p/6507504.html
knockout.js http://www.cnblogs.com/coding4/p/6373376.html
jquery http://www.cnblogs.com/coding4/p/5526327.html
webpack http://www.cnblogs.com/coding4/p/6380979.html
gulp http://www.cnblogs.com/coding4/p/6511886.html
sass: http://www.ruanyifeng.com/blog/2012/06/sass.html
http://www.w3cplus.com/sassguide/
less :http://www.cnblogs.com/coding4/p/6358009.html
css: http://www.cnblogs.com/coding4/p/6182809.html
移动端的开发:http://study.163.com/course/introduction/1003682014.htm?from=study#/courseDetail
重绘和回流(重排):http://blog.csdn.net/yummy_go/article/details/50696328
0000:canvas 画布 http://www.cnblogs.com/coding4/p/5593954.html
0001.promise http://www.cnblogs.com/coding4/p/6079937.html
html5 http://www.cnblogs.com/coding4/p/5450414.html
websocket:http://www.cnblogs.com/coding4/p/6535564.html
css3 http://www.cnblogs.com/coding4/p/5450228.html
css3动画: http://www.w3school.com.cn/css3/css3_animation.asp
js以前面试打印的。http://www.cnblogs.com/coding4/p/6504161.html
js的正则表示式 http://www.cnblogs.com/coding4/p/6081063.html
js的设计模式 http://blog.csdn.net/xianyu410725/article/details/46712921
js没事干一些框架 博客1
函数声明自动提前
// 这里标记为代码块A
var ss = function () {
return '222';
};
// 这里标记为B
function ss() {
return '111';
}
function run() {
console.log(ss());
}
run();
// 不论代码块A在代码块B的前边或者后边,那么最后 都是 代码块A的结果
var 也会造成访问的undefined
----demo1
function aa() {
var a = 1;
}
aa();
console.log(a) // 浏览器中1 而node中报错 a is not defined
----demo2
function aa() {
a = 1;
}
aa();
console.log(a) // 1
----demo3
var ss = 123;
function test() {
console.log(ss); // undefined
var ss = 456;
}
test();
----demo4
function test() {
console.log(ss); // let会导致这里会报错
let ss = 456;
}
test();
经典的闭包保护变量
var data = [];
for(var i=0;i<3;i++) {
(function (i) {
data[i] = function() {
console.log(i)
}
})(
i
)
}
data[0]()
data[1]()
data[2]()
原型链重写的陷阱
function Fn() {
var n = 10;
this.m = 20;
this.aa = function() {
console.log(this.m + 10);
}
}
Fn.prototype.bb = function() {
console.log(this.n);
}
var f1 = new Fn();
Fn.prototype = {
aa: function() {
console.log(this.m);
}
}
var f2 = new Fn();
f1.constructor // Fn
f2.constructor // Object
f1.aa() // 30
f2.aa() // 30
f1.bb() // undefined
f2.bb() // 报错
构造器
function Aaa() {}
Aaa.print(){} //
Aaa.prototype.print(){}
new Aaa.print() // 构造器是Aaa.print的静态方法
new Aaa().print() // Aaa
js的隐式转化toPrimitive的原理 例子1 例子2
由于JS的弱类型特性,在进行JS的==, 排序运算符, 加减乘除,在对非原始值进行操作时,都会调用内部的toPrimitive(input,type)方法。
// type String Number default
如果 不传type的话,
1. 如果input是原始值,直接返回这个值;
2. 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;
3. 否则,调用input.toString()。如果结果是原始值,返回结果;
4. 否则,抛出错误。
如果转换的type 类型是String,2和3会交换执行,即先执行toString()方法。
js的==左右两侧的转化规律 例子一
有数字的时候
无数字但是因为有布尔值,先将布尔值转化为数字
“!” 为逻辑非会将该数据类型先转换为布尔值后再取反, 这个是重点,Boolean([]) Boolean({})结果都是true Boolean(NaN)为false
特殊的null==undefined为true;然后null,undefined,NaN 不会与认识相等
[] == ![] // 打印 true https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
① 将==右侧数组转换为布尔值后再取反,Boolean([])==true, 转换后相当于[]==false
② 根据“比较前布尔值转数值”规则,转换后相当于[]==0
③ 根据“比较前数组遇数值先转字符串后转数值”规则,转换后相当于0==0 (这个规则是这样子的,如果一个对象遇到一个数字或者字符串比较,对象调用toPrimitive,然后调用valueOf(一般没效果),toString,这个成了字符串,字符串与数字比较,字符串要先转为数字,然后总结起来就是 比较前数组遇数值先转字符串后转数值)
[1,2,3].toString() // ‘1,2,3’
({name:123}).toString() // "[object Object]” // 不写括号会报错,如果aa= {name:123};aa.toString()就没问题
({}).toString() // ‘'
[] == [] 两个指针不同所以为false
js的隐式转化toPrimitive的原理
由于JS的弱类型特性,在进行JS的==, 排序运算符, 加减乘除,在对非原始值进行操作时,都会调用内部的toPrimitive(input,type)方法。
// type String Number default
如果 不传type的话,
1. 如果input是原始值,直接返回这个值;
2. 否则,如果input是对象,调用input.valueOf(),如果结果是原始值,返回结果;
3. 否则,调用input.toString()。如果结果是原始值,返回结果;
4. 否则,抛出错误。
如果转换的type 类型是String,2和3会交换执行,即先执行toString()方法。
js的==左右两侧的转化规律 https://www.jianshu.com/p/a111336c3d18
有数字的时候
无数字但是因为有布尔值,先将布尔值转化为数字
“!” 为逻辑非会将该数据类型先转换为布尔值后再取反, 这个是重点,Boolean([]) Boolean({})结果都是true Boolean(NaN)为false
特殊的null==undefined为true;然后null,undefined,NaN 不会与认识相等
[] == ![] // 打印 true https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators
① 将==右侧数组转换为布尔值后再取反,Boolean([])==true, 转换后相当于[]==false
② 根据“比较前布尔值转数值”规则,转换后相当于[]==0
③ 根据“比较前数组遇数值先转字符串后转数值”规则,转换后相当于0==0 (这个规则是这样子的,如果一个对象遇到一个数字或者字符串比较,对象调用toPrimitive,然后调用valueOf(一般没效果),toString,这个成了字符串,字符串与数字比较,字符串要先转为数字,然后总结起来就是 比较前数组遇数值先转字符串后转数值)
[1,2,3].toString() // ‘1,2,3’
({name:123}).toString() // "[object Object]” // 不写括号会报错,如果aa= {name:123};aa.toString()就没问题
({}).toString() // ‘'
[] == [] 两个指针不同所以为false
+和Number的效果一样
+true 为 1
+NaN NaN
+'asdf’ NaN
+null 0
+undefined NaN
Ps: null==undefined 并且,+null 0,+undefined NaN
数组的length属性主动赋值
±好的默认意义
1 + +"2" + "2" // '32'
(1 + -"1" + "2") // '02'
(+"1" + "1" + "2") // '112'
("A" - "B" + "2") // 'NaN2'
("A" - "B" + 2) // 'NaN'
'asdf'-2 // NaN
'asdf'-2 + 'a' // 'NaNa'
#### !!0 === false
javascript的this 和 window的区别和联系
// 第一种情况
// 如果直接访问的话,代表的是window
var aa = 5;
// 第二种情况
function test() {
this.aa = 5; // 这里也是指向window
}
// 第三种情况
var ss = {
a: 123,
b: function() {
console.log(this); // 指向ss
}
}
// 第四种情况
setTimeout(function () {
console.log(this); // 指向window
})
// 第五种情况
button.addEventListen('click', function () {
console.log(this); // 指向window
});
js需要记住的东西
1.写动用代码的时候,千万不要写出了setTimeout这种代码,这会导致别人调用公共模块的时候都需要异步了。
2.写代码的时候千万注意代码的数据的独立性,如果涉及到数据隔离的,所有函数的调用都必须传指针。
比如:
mapSH:{type:”上海”},
mapChina:{type:”中国”},
调用代码的时候通过这个type类型进行区分。
5
'2017-12-12'.split(/\d{4}-/)[1]
打印出来 "12-12”
6 字符串转数字最简单的方式
js的调试技巧
1.console.log在控制台有时候因为没有分号和有分号不同。
2.vue中有时候控制台的debugger的this和真实的this并不同。
js原生dom操作
原生js dom
#### js的各种位置,比如clientHeight,scrollHeight,offsetHeight ,以及scrollTop, offsetTop,clientTop的区别
clientHeight:表示的是可视区域的高度,不包含border和滚动条
offsetHeight:表示可视区域的高度,包含了border和滚动条
scrollHeight:表示了所有区域的高度,包含了因为滚动被隐藏的部分。
clientTop:表示边框border的厚度,在未指定的情况下一般为0
offsetTop: 还是上面那张图,div的offsetTop为20,因为margin-top是20,距离html顶部的距离是20
scrollTop:可读可写,滚动后被隐藏的高度,获取对象相对于由offsetParent属性指定的父坐标(css定位的元素或body元素)距离顶端的高度。
clientWidth scrollWidth offsetWidth 和offsetLeft(与offsetParent 有关) 链接一
Client 可视区域的不带隐藏的,不带滚动条和border
Offset 可视区域不带隐藏的,带border和滚动条
Scroll 所有的
mouseover
全划过over out
父进入enter leave
arguments先要转化为数组
function aaa() {
// arguments.slice(0, 1) // 报错
const aa = [...arguments].slice(0, 1);
console.log(aa);
}
---
function aaa(...args) {
const aa = args.pop();
}