2020年注定是不同寻常的一年,相信大部分程序员也和我一样,不能按时返回工作的城市,不能按时复工,都说
金三银四
,但是同样的竞争压力也很大,如果自身够强大,一年365天都是金色的 !!
最近疫情危机有所缓解,很多公司也都正常运转,招聘工作也开始启动,大家肯定也都蠢蠢欲动了。
我整理的点都是前中级程序员必会
的,如果你都掌握了,相信你肯定可以找到一份满意的工作,如果对你的面试过程有帮助,记得回来点赞哦 !!!
相同点:作用域——只在声明所在的块级作用域内有效。且不存在变量提升
不同点:let 所声明的变量,可以改变,const 声明一个只读的常量,不可改变
一次性声明多个变量:
let [a, b, c] = [1, 2, 3];
console.log(a) // 1
console.log(b) // 2
console.log(c) // 3
结合扩展运算符:
let [head, ...tail] = [1, 2, 3, 4];
console.log(head) // 1
console.log(tail) // [2, 3, 4]
数组中,变量的取值由它 排列的位置 决定;而对象中,变量必须与 属性 同名,才能取到正确的值。
let { a, b } = { a: "aaa", b: "bbb" };
a // "aaa"
b // "bbb"
const [a, b, c, d, e] = 'apple';
a // "a"
b // "p"
c // "p"
d // "l"
e // "e"
ES6 允许使用“箭头”(=>)定义函数。
const f = v => v;
console.log('输出值:', f(100)) // 输出值: 100
// 等同于
const f = function (v) {
return v;
};
箭头函数最直观的三个特点:
不需要 function 关键字来创建函数
省略 return 关键字
继承当前上下文的 this 关键字
扩展运算符是三个点(…)
const arrA = ['a','b','c'],
const arrB = ['d'],
const arrC = ['e','f'],
// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e','f ]
// ES6 的合并数组 !!!!!
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e','f ]
function add(x, y) {
return x + y;
}
const numbers = [1, 2];
add(...numbers) // 3
[...'hello']
// [ "h", "e", "l", "l", "o" ]
const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };
Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}
注意,如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性。
async 和 await 用了同步的方式去做异步,async 定义的函数的返回值都是 promise,await 后面的函数会先执行一遍,然后就会跳出整个 async 函数来执行后面js栈的代码
注:两者需同时使用
vue应该是现在大部分公司选用的框架了 学习成本较低 网上轮子也很多 掌握下面几个知识点,面试应该不成问题!!!
创建:
beforeCreate: 是获取不到data中的数据的,因为数据的初始化在initState中
created:可以访问数据,但组件还没有被挂载,所以看不到
载入:
beforeMount: 创建虚拟Dom
mounted:将虚拟Dom渲染为真实Dom,并渲染数据
更新:
beforeUpdate:数据更新前
updated:更新后
销毁:
beforeDestory:适合移除事件,定时器等,否则可能引起内存泄漏
destoryed:当我们离开这个页面的时候,便会调用这个函数
v-if(判断是否隐藏)
v-for(把数据遍历出来)
v-bind(绑定属性)
v-model(实现双向绑定)
相同点:都可以动态控制着dom元素的显示隐藏
区别:
v-if 的显示隐藏是将DOM元素整个添加或删除
v-show 的显示隐藏是为DOM元素添加css的样式display,设置none或者是block,DOM元素是还存在的
可以使用props向子组件传递数据
在调用组件的时候,使用 v-bind进行绑定
子组件可以使用 $emit 触发父组件的自定义事件
Vue 没有直接子对子传参的方法,建议将需要传递数据的子组件,都合并为一个组件。如果一定需要子对子传参,可以先从传到父组件,再传到子组件
为了便于开发,Vue 推出了一个状态管理工具 Vuex,可以很方便实现组件之间的参数传递
1、全局守卫: router.beforeEach
2、全局解析守卫: router.beforeResolve
3、全局后置钩子: router.afterEach
4、路由独享的守卫: beforeEnter
5、组件内的守卫: beforeRouteEnter、beforeRouteUpdate (2.2 新增)、beforeRouteLeave
vue.js 是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡
onLoad( ):页面加载时触发,只会调用一次,可获取当前页面路径中的参数
onShow( ):页面显示/切换前台时触发,一般用来发送数据请求
onReady( ):页面初次渲染完成时触发,只会调用一次,代表页面已可和视图层进行交互
onHide( ):页面隐藏/切入后台时触发,如底部tab切换到其他页面或小程序切入后台等
onUnload( ):页面卸载时触发,如redirectTo或navigateBack到其他页面时。
在 app.js 文件中定义全局变量 globalData, 将需要存储的信息存放在里面
// app.js
App({
// 全局变量
globalData: {
userInfo: null
}
})
使用的时候,直接使用 getApp().userInfo 拿到存储的信息
//pageA.js
// Navigate
wx.navigateTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// Redirect
wx.redirectTo({
url: '../pageD/pageD?name=raymond&gender=male',
})
// pageB.js
...
Page({
onLoad: function(option){
console.log(option.name + 'is' + option.gender)
this.setData({
option: option
})
}
})
wx.getStorage({
key: 'key',
success (res) {
console.log(res.data)
}
})
wx.getStorageInfo({
success (res) {
console.log(res.keys)
console.log(res.currentSize)
console.log(res.limitSize)
}
})
子组件 js
var value = 123;
this.triggerEvent('callSomeFun', value)
父组件 wxml
<component bind:callSomeFun="functionA"></component>
父组件 js
functionA(e){
console.log('我被子组件调用了')
}
triggerEvent 方法详解
子组件 js
functionB{
console.log('我被父组件调用了')
}
父组件 wxml
<component id='test'></component>
父组件 js
this test= this.selectComponent("#test")
//调用方法
this test.functionB()
优点:
1.避免全局变量的污染
2.希望一个变量长期存储在内存中(缓存变量)
缺点:
1.内存泄露(消耗)
2.常驻内存,增加内存使用量)
强制:parseInt,parseFloat,number
隐式:==,===
split:是将字符串切割成数组的形式
join:是将数组转换成字符串
==:会自动转换类型,然后再去比较
===:不转换类型之间去比较
PS:招聘前端程序员,如果有意向在天津(西青区)工作的小伙伴请留言或者私信哦 !!