js陷阱缺陷点滴yan&js原生dom点滴yan

为了应付古老的面试和js语言各种糟粕

古老面试题

总结了17年初到18年初百场前端面试的面试经验

初中级前端面试题

这儿有20道大厂面试题等你查收

字节跳动一面、二面凉经

送你 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

博客2
博客3
博客4
博客5
博客6
博客7

函数声明自动提前
// 这里标记为代码块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==undefinedtrue;然后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隐式的类型转换

由于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==undefinedtrue;然后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的效果一样
+true1
+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-126 字符串转数字最简单的方式
js的调试技巧
1.console.log在控制台有时候因为没有分号和有分号不同。
2.vue中有时候控制台的debuggerthis和真实的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();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值