- 博客(96)
- 资源 (5)
- 收藏
- 关注
原创 空值合并运算符 (??逻辑运算符)
空值合并运算符(??)是一个逻辑运算符。当左侧操作数为 null 或 undefined 时,其返回右侧的操作数。否则返回左侧的操作数。const foo = null ?? 'default string';console.log(foo); // 输出:"default string"const baz = 0 ?? 42;console.log(baz); // 输出:0TS 代码经过编译后,会生成以下 ES5 代码:"use strict";var _a, _b;var.
2020-07-13 11:47:44 2801
原创 解决递归调用栈溢出--尾递归优化
递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)可以表示为n x fact(n-1),只有n=1时需要特殊处理。于是,fact(n)用递归的方式是:def fact(n): if n==1: return 1 return n * fact(n - 1)如果我们计算5的阶乘,可以看到计算过程如下:使用递归函数需要注.
2020-07-03 16:04:59 3096
原创 Uncaught reflect-metadata shim is required when using class decorators
当运行Angular项目时出现如下错误(Uncaught reflect-metadata shim is required when using class decorators):需要安装:npm install reflect-metadata zone.js然后在main.ts中最开始导入:import 'zone.js';import 'reflect-metadata'...
2020-03-31 14:34:10 476
原创 win10系统关机时提示(程序没有响应)需要结束程序
win10电脑关机时总是提示如下:解决方法如下:1、按下WIN+R,然后输入gpedit.msc 回车2、展开计算机配置-管理模板-系统-关机选项;3、将把"关闭会阻止或取消关机的应用程序的自动终止功能“设置为:已禁止一次点击如图所示内容...
2020-03-05 10:42:33 14205 5
原创 ES2020新特性
1.通过 #给 class 添加私有变量class Counter { #number = 10 increment() { this.#number++ } getNum() { return this.#number }}const counter = new Counter()counter.increment()console.log(c...
2020-01-17 10:23:47 8135
原创 Javascript如何判断一个值是不是NaN
问题由来:如何判断一个函数的返回值是不是NaN?NaN==NaN; //falseNumber.isNaN(NaN); //treuObject.is(NaN,NaN); //true Object.is()方法用来判断两个值是否是相同的值。用法Object.is(val1, val2);Object.is...
2020-01-10 16:12:45 3125
原创 stackblitz复现工具的使用
stackblitz是一个可以在线编辑并查看angular项目的工具。目前只支持angular-cli脚手架项目使用:1.在github上打开你的项目:2.将github.com改为stackblitz.com/github改为使用非常方便,遗憾的是目前只支持angular-cli脚手架项目...
2019-12-20 15:02:14 2370
原创 Angular 8.x使用ViewChild报错
错误:error TS2554: Expected 2 arguments, but got 1.应有 2 个参数,但获得 1 个。ts(2554)core.d.ts(7888, 47):An argument for 'opts' was not provided.原因:ViewChild需要两个参数,并没有提供opts官网解释:static- whether o...
2019-12-19 11:20:39 3191
原创 Angular中锚点的写法
普通页面中的写法<a href="#id">跳转</a><div id="id">指定位置</div>此方法在angular中是失效的,因为此写法跟路由冲突解决方案一:(不推荐)//html:<a (click)="goDetail('id')">跳转</a><div id="id">指定...
2019-12-13 15:49:28 1519
原创 数组去重后长度大于10,求出现频率最高的10个元素
js解决方法如下: function findTopTen(arr1) { let obj = {}, len1 = arr1.length; for (let i = 0; i < len1; i++) { obj[arr1[i]] == undefined ? obj[arr1[i]] = 1 :...
2019-12-12 14:55:59 597
原创 Number([])与Number({})
Number()函数转换规则如下:转换规则:1)如果是Boolean值,true和false将分别转换为1和0。2)如果是数字值,只是简单的传入和返回。3)如果是null值,返回0。4)如果是undefined,返回NaN。5)如果是字符串,遵循下列规则:如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123...
2019-12-03 17:11:36 2199 1
原创 angular组件通信,数据请求,路由
一.父子组件及组件之间的通信父组件给子组件传值 -@input(可以传递数据,方法以及整个父组件(传递this [home]=’this’))父组件调用子组件的时候传入数据 <app-xx [msg] = ‘msg’></app-xx> 子组件引入Input模块 import {Input} from ‘@angular/core’ 子组件中@...
2019-12-02 18:06:43 888
转载 Git使用详解
一、Git工作流程以上包括一些简单而常用的命令,但是先不关心这些,先来了解下面这4个专有名词。Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库工作区程序员进行开发改动的地方,是你当前看到的,也是最新的。平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过...
2019-09-18 17:14:43 456
原创 循环中使用闭包解决 var 定义函数的问题
//本文首发于掘金社区,链接:https://juejin.im/post/5d7461c6e51d453bc470df4f经典面试题,循环中使用闭包解决 var 定义函数的问题for ( var i=1; i<=5; i++) {setTimeout( function timer() {console.log( i );}, i*1000 );}复制代码...
2019-09-08 10:11:12 943
原创 [] == ![]
== 操作符toPrimitive 是对象转基本类型。[] == ![] // -> true ,下面是这个表达式为何为 true 的步骤:// [] 转成 true,然后取反变成 false [] == false // 根据第 8 条得出 [] == ToNumber(false) [] == 0 // 根据第 10 条得出 ToPrimi...
2019-09-05 22:23:02 178
原创 HTTP状态码
//本文首发于掘金社区:https://juejin.im/post/5d70f594e51d4561b072dd74状态码的职责是当客户端向服务端发送请求时,描述返回的请求的结果,借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误.状态码类别:2xx成功2xx的响应结果表明杯正常处理200 ok:表示从客户端发来的请求在服务器端被正常处理了204 no ...
2019-09-05 20:34:31 587
原创 前端面试总结(面向校招)
一.Vue相关1.vue中的MVVM模式(优点?)即Model-View-ViewModelModel代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。View代表UI组件,它负责将数据模型转化成UI展现出来。ViewModel监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View和Model的对象,连接Model和View。Vue是以数...
2019-08-25 16:51:20 1308
原创 javascript数组详解
静态成员from:将伪数组转换为真数组let args = Array.from(arguments);isArray 判断给定的数据是不是真数组(真数组:通过Array构造器构造的数组)of Array.of()与new Array()的区别,如果只有一个参数n,前者表示数组只有一位,值为n;后者表示创建一个长度为n的空数组实例成员会改变原数组fill 填充数...
2019-08-04 16:20:36 199
原创 javascript运算符和表达式
运算符表达式表达式 = 操作符 + 操作数 每个表达式都有一个运算结果,该结果叫做返回值,返回值的类型叫做返回类型所有的表达式可以当作数据使用=:该表达式返回赋值的结果 .:返回属性的值(同()) console.log函数调用返回的结果为undefinedchrome浏览器控制台的环境是REPL环境(读 -- 执行 -- 打印 -- 循环) 除了输出表达式的值外,还会输...
2019-08-02 11:08:17 233
原创 window.name属性
题目:var name;console.log(name);console.log(typeof name);按照正常思路来说,只是声明了name变量并未赋值,所以按常理来说应该输出:undefined"undefined"但是运行结果为究其原因,是因为window存在一个叫name的属性此属性为空,实际上,开发者定义的所有变量,都会成为window...
2019-08-01 20:34:17 3169 1
原创 深入css权重计算
- 1.千位:如果是内联样式,记为1,否则为0- 2.百位:等于选择器中所有id选择器的数量- 3.十位:等于选择器中所有类选择器,属性选择器,伪类选择器的数量- 4.个位:等于选择器中所有元素(标签)选择器,伪元素选择器的数量- 5.通配符选择器为0 也就是说权重计算可以初始为0000,按照上述规则,每存在一个选择器便在该位上加一,但是进制是256进制,也就是说,10个低一级的...
2019-07-31 11:22:34 219
原创 剑指offer(js版)
1.在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。function Find(target, array){ // write code here for(let i = 0; i < array.length;i++)...
2019-07-26 09:46:45 2168 1
转载 webpack的面试题总结
本文转自于前端面试总结@知乎专栏:https://zhuanlan.zhihu.com/p/44438844随着现代前端开发的复杂度和规模越来越庞大,已经不能抛开工程化来独立开发了,如react的jsx代码必须编译后才能在浏览器中使用;又如sass和less的代码浏览器也是不支持的。 而如果摒弃了这些开发框架,那么开发的效率将大幅下降。在众多前端工程化工具中,webpack脱颖而出成为了当今最...
2019-07-25 20:53:51 21084 1
原创 前端面试问题(持续整理中。。。)
百度校招一面ajax流程讲一下 了解promise吗,简单说一下 手写一个箭头函数如何使用 实现一个链式调用 写个简单的观察者模式 数组去重 let和const有什么区别 如何判断数据类型,如果遇到null呢 写一个正则,要求匹配电话号区号+座机号,并且给区号添加上括号 mvc,mvp和mvvm的区别 笔试题topK用什么排序?(答了堆排序)堆排序时间复杂度,稳定性以及什么...
2019-07-25 11:41:23 306
原创 var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a.x) console.log(b.x)
var a = {n: 1};var b = a;a.x = a = {n: 2};console.log(a.x) //undefined console.log(b.x) //{n == 2}解释:var b = a; 对象存贮在堆内存,a和b同时引用 {n:2}赋值操作为从左到右操作,但是 . 的优先级要高于 =所以先执行a.x,此时a和b的共同索引为{...
2019-07-23 14:43:16 2127
转载 Set、Map、WeakSet 和 WeakMap 的区别
Set 和 Map 主要的应用场景在于数据重组和数据储存Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构1. 集合(Set)ES6 新增的一种新的数据结构,类似于数组,但成员是唯一且无序的,没有重复的值。Set 本身是一种构造函数,用来生成 Set 数据结构。new Set([iterable])举个例子:const s = new Set(...
2019-07-17 15:06:25 4605 1
原创 什么是防抖和节流?有什么区别?如何实现?
一部分的用户行为会频繁的触发事件执行,而对于DOM操作,资源加载等耗费性能的处理,很有可能导致界面卡顿,甚至浏览器的崩溃,防抖和节流就是解决这种问题的防抖触发高频事件后n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间防抖就是在函数需要频繁触发情况时,只有足够空闲的时间,才执行一次(公交司机等人上齐后才出站)思路: 每次触发事件时都取消之前的延时调用方法f...
2019-07-17 11:00:18 2686
转载 每日一题(web前端)
第 1 题:写 React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?key是给每一个vnode的唯一id,可以依靠key,更准确, 更快的拿到oldVnode中对应的vnode节点。1. 更准确因为带key就不是就地复用了(不带有key,并且使用简单的模板,基于这个前提下,可以更有效的复用节点,diff速度来看也是不带key更加快速的,因为带key在增删节点上...
2019-07-17 09:08:26 1532
转载 Js中的Map对象
map()方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。var new_array = arr.map(function callback(currentValue[, index[, array]]) { // Return element for new_array }[, thisArg])callback生成新数组元素的函数,使用三个参...
2019-07-17 09:07:45 1088
原创 css属性值的计算过程
##属性值的计算过程一个一个元素依次渲染,顺序按照页面文档的树形目录结构进行(深度优先渲染)渲染每个元素的前提条件:该元素的所有css属性必须有值一个元素从所有属性都没有值,到所有属性都有值,这个过程叫做属性的计算过程1.确定声明值(参考样式表中没有冲突的声明,作为css属性值)2.层叠冲突(对样式表有冲突的声明使用层叠规则,确定css值)3.使用继承(对仍然没...
2019-07-10 20:04:43 663
转载 JavaScript正则表达式详解
第一章 正则表达式字符匹配攻略 第二章正则表达式位置匹配攻略 第三章 正则表达式括号的作用 第四章 正则表达式回溯法原理 第五章 正则表达式的拆分 第六章 正则表达式的构建 第七章 正则表达式编程 后记下面简单地说说每一章都讨论了什么?正则是匹配模式,要么匹配字符,要么匹配位置。第1章和第2章以这个角度去讲解了正则的基础。在正则中可以使用括号捕获数据,要么在API中进...
2019-06-13 18:49:46 8614 6
转载 Javascript异步编程的4种方法
作者:阮一峰你可能知道,Javascript语言的执行环境是"单线程"(single thread)。所谓"单线程",就是指一次只能完成一件任务。如果有多个任务,就必须排队,前面一个任务完成,再执行后面一个任务,以此类推。这种模式的好处是实现起来比较简单,执行环境相对单纯;坏处是只要有一个任务耗时很长,后面的任务都必须排队等着,会拖延整个程序的执行。常见的浏览器无响应(假死),往...
2019-06-02 16:21:27 152
原创 javascript经典面试题整理
一.类型转换var a = false + 1;console.log(a); //1var b = false == 1;console.log(b);//falseif(typeof(a) && (-true) + (+undefined) + ''){console.log('通过了');}// typeof(a) --> 'u...
2019-06-02 11:17:46 985
原创 web前端企业JavaScript常见面试题
1.函数声明和函数表达式的区别show1();//show1function show1(){ //函数声明console.log("show1");}show1();//show1console.log(show2);//undefinedvar show2 = function(){ //函数表达式console.log("show2");}show...
2019-05-18 11:35:55 1184
原创 什么是跨域,如何解决跨域问题?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。同源:域名,协议,端口均相同不同源:协议不同(http/https),域名不同,域名的前缀不同,端口不同,域名和域名对应ip也属于跨域,请注意:localhost和127.0.0.1虽然都指向本机,但也属于跨域。1、后端配置cors:本人对后端领域尚未涉足,推荐博客...
2019-05-18 10:15:31 543
原创 css3兼容各版本浏览器前缀
前缀 浏览器-webkit- chrome、safari-moz- firefox-ms- IE-o- opera...
2019-04-16 20:38:39 986
转载 JavaScript数组方法大全(包含ES6)
JavaScript中创建数组有两种方式(一)使用 Array 构造函数:var arr1 = new Array(); //创建一个空数组var arr2 = new Array(20); // 创建一个包含20项的数组var arr3 = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组(二)使用数组字面量表示法:...
2019-04-13 15:44:29 1579
原创 javascript交换两个数
(1) 临时变量let a = 12,b = 5;let temp = a;a = b;b = temp;(2)数值相加减交换let a = 12,b = 5;a = a + b; //a = 17,b = 5b = a - b; //a = 17,b = 12a = a - b; ...
2019-04-12 15:46:16 426
转载 web前端面试题-开发及性能优化
1、规避javascript多人开发函数重名问题命名空间封闭空间js模块化mvc(数据层、表现层、控制层)seajs变量转换成对象的属性对象化2、请说出三种减低页面加载时间的方法压缩css、js文件合并js、css文件,减少http请求外部js、css文件放在最底下减少dom操作,尽可能用变量替代不必要的dom操作3、你所了解到的Web攻击技术(1)XSS(Cross-Site...
2019-04-10 21:22:32 1247
转载 深入理解B/S与C/S架构
阅读目录 C/S架构简要介绍 什么是B/S架构 B/S架构的几种形式 发展前景 一、C/S架构简要介绍在了解什么是B/S架构之前,我们有必要了解一下什么是C/S架构:C/S架构是第一种比较早的软件架构,主要用于局域网内。也叫客户机/服务器模式。它可以分为客户机和服务器两层:第一层: 在客户机系统上结合了界面显示与业务逻辑;...
2019-04-10 21:19:43 658
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人