ES6中两个对象的合并有几种方法
- Object.create()
- Object.assign()
- {...obj1, ...obj2}
JSON可以序列化哪些值
序列化之后,他会自动删除值为函数,undefined, Symbol值的属性。
const obj = { bar() { return 1 }, a: null, b: undefined, c: Symbol() } const info = JSON.parse(JSON.stringify(obj)) // {a: null}。null是可以被序列化的
手写ajax
// 创建一个http请求对象 if (window.XMLHttpRequest) { // Mozilla, Safari, IE7+ ... httpRequest = new XMLHttpRequest(); } else if (window.ActiveXObject) { // IE 6 and older httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); } // 接收响应对象 httpRequest.onreadystatechange = function(){ if (httpRequest.readyState === 4) { if (httpRequest.status === 200) { alert(httpRequest.responseText); } else { alert('There was a problem with the request.'); } } }; // 发送数据 httpRequest.open('GET', 'http://www.example.org/some.file', true); // send中发送post请求数据。 httpRequest.send();
遍历数组的方法中有哪些是不能中断的
一些高阶方法都不可以中断。forEach, map, every, some, find, reduce等等。
正常的for循环都可以中断。for, for in, for of。
解释一下你认为的h5
他并不是指HTML5标准,而是一种解决我们现代网页制作的方案。
H5实际上是一个解决方案,不仅包含了HTML5新增的audio标签,canvas,拖拽特性,本地存储,websocket通信,同时也包括了盒模型,包括绝对定位,包括一切前端的基本知识。
是按照 HTML5 规范实现的页面,其中用到了许多新的特性。
https是否可以被拦截
???如果要我回答,拦截是肯定可以拦截的,但是数据都被加密,不会被破解。
会被抓包,HTTPS 只防止用户在不知情的情况下通信被监听,如果用户主动授信,是可以构建“中间人”网络,代理软件可以对传输内容进行解密。
css的引入方式
- 行内样式(行间样式、内联样式、行嵌样式): 在网页元素上通过
style=""
属性直接写样式。
- 内部样式表: 在网页上创建嵌入的样式表,通常写在
<head></head>
里面。style标签中。这里的样式是html解析器解析的,所以边解析css,边解析html,可能会出现闪屏现象。
- 链入外部样式表: 将网页链接到外部样式表。先创建一个 CSS 文件,再在 HTML 中通过
<link>
链接此 CSS 文件。一般写在<style></style>
的前面。link可以异步去加载css,不需要等待dom解析完毕。
- 导入外部样式表: 通过
@import
引入其他的 CSS 文件。写在style标签中。@import
需要网页结构完全载入以后加载样式文件。
比较一下上面这些引入方式的权重。
行内样式 > 内部样式 == link引入 > @import
所以内部样式和link方式引入的css,后者覆盖前者的样式。然后再看其选择器的权重。
给span设置margin, padding有效吗
padding是个方向都是有效的。但是margin上面方向不生效。
< img style="400px !important"/>怎样修改宽高为300px
注意max-width权重大于width。
img { transform: scaleX(0.75); } img { box-sizing: border-box; padding: 0 50px; } img { max-width: 300px !important; }
https使用的是对称加密还是非对称加密
在生成pre-master时,使用的是非对称加密,最后通过client-random, service-random, pre-master使用的是对称加密。
还有就是在生成数字签名的使用的是非对称加密。
语义化标签有哪些, 语义化标签的行内标签有哪些
article, aside, details, figcaption, figure, footer, header, main, mark, nav, section, summary, time。
行内标签
- abbr:缩写
- em:强调
- strong:粗体强调
- mark:突出显示的文本
- b:粗体
- i:斜体
- big:大字体
- small:小字体
- sup:上标
- sub:下标
- del:被删除的文本
- strike:删除线
- s:删除线
- ins:被插入的文本
- u:下划线
- time:日期/时间
- cite:引用
- q:短引用("")
- font:字体设定
css可以实现哪些交互事件
- checked 表单元素被选中的元素
- focus 选中表单聚焦的元素
- link 未移入时的状态
- visited 表示用户已访问过的链接状态
- hover 引入后的状态
- active 鼠标按下的状态其他所有的伪类选择器请查看这里
css动画有哪些属性
animation-name
定义动画的名称,@keyframes会根据名称来执行那个标签的动画。
animation-duration
定义动画的持续时长。
animation-timing-function
定义动画的过度曲线。
animation-delay
定义动画延迟多少秒执行
animation-iteration-count
动画重复的次数。一般为infinite,表示无限次。
animation-direction
动画的方向。就是每次动画结束后,怎么进行下一次动画。
normal
:每个循环内动画向前循环,换言之,每个动画循环结束,动画重置到起点重新开始,这是默认属性。
alternate
:动画交替反向运行,反向运行时,动画按步后退,同时,带时间功能的函数也反向,比如,ease-in
在反向时成为ease-out
。计数取决于开始时是奇数迭代还是偶数迭代
reverse
:反向运行动画,每周期结束动画由尾到头运行。
alternate-reverse
: 反向交替,反向开始交替。动画第一次运行时是反向的,然后下一次是正向,后面依次循环。决定奇数次或偶数次的计数从 1 开始。
animation-fill-mode
确定动画在执行之前和之后这两个阶段应用的样式。就是表示动画执行结束后,他所处的状态。
none
当动画未执行时,动画将不会将任何样式应用于目标,而是已经赋予给该元素的 CSS 规则来显示该元素。这是默认值。就是使用该元素非动画的样式值,不适用任何动画时的样式值。
forwards
目标将保留由执行期间遇到的最后一个关键帧计算值。
backwards
动画将在应用于目标时立即应用第一个关键帧中定义的值。并在animation-delay
期间保留此值。并不是我认为的在动画期间保留动画之前的值。
both
动画将遵循forwards
和backwards
的规则,从而在两个方向上扩展动画属性。就是在animation-delay
使用的是0%状态下的动画样式,在动画结束时,使用的是100%状态下的样式值。
animation-play-state
确定动画是否正在播放。
paused
暂停当前动画。
running
,这个是默认值。 执行当前动画。
http / 1.1的纯文本传输与http / 2的二进制协议有什么区别
这还是在b站一up模拟面试看见的。他解释的是纯文本最后也使用的是二进制传输,并且会将每个头字段的换行符而转为二进制,增加了传输的带宽。
null==0是 false 还是true null>=0 返回啥呢?
null == 0 // false null >= 0 // true
null只有和undefined才会为true, null和其他值==比较时,都是false。
- == 两边的操作数,最后都会通过ToNumber来将其转换为number类型进行比较。
- 如果操作数是对象类型,那么将通过ToPromitive来将其转为基本数据类型,然后再通过ToNumber来转为数字进行比较。
如果null做大小比较时,他会被转为0。所以null >= 0
为true。因为调用了Number方法,但是对于undefined就都为false。因为undefined
被Number转换后为NaN。
git
我使用git主要就是将我的项目推送到github上。
//在github中创建一个远程仓库 //在本地克隆仓库 git clone 地址 //创建项目架构 //将文件添加到暂缓区 git add . //查看文件状态 git status //将文件提交到本地 git commit -m "文件介绍" //将文件提交到远程仓库 git push -u origin master //接下来写是业务代码 //创建分支 git checkout -b 分支名 //......该分支业务完成 //提交子分支代码到远程仓库 git checkout 子分支 //查看处于哪个分支 git branch //将该分支写的代码放入缓存区 git add . //将该分支提交到本地 git commit -m '...分支完成' //提交该分支到远程仓库 git push -u origin 子分支名称 // 下面一部分的代码一定不能和上面调换 //将分支合并到主分支 git checkout master git merge 子分支名称 //将合并后的master分支提交到本地 git commit -m "...完成" //提交更新后的主分支 git push
css预处理器说一下
CSS 预处理器是一个能让你通过预处理器自己独有的语法来生成CSS的程序。
代码混合,嵌套选择器,继承选择器等。
sass, less, stylus, postcss。
pnpm
- 包的安装速度非常快。
- 磁盘空间利用非常高效(基于内容寻址)。
- 不会重复安装同一个包。
- 即使一个包的不同版本,pnpm 也会极大程度地复用之前版本的代码。
- 支持 monorepo monorepo 的宗旨就是用一个 git 仓库来管理多个子项目,所有的子项目都存放在根目录的
packages
目录下,那么一个子项目就代表一个package
。
- 安全性高。因为npm,yarn管理包是扁平化的,所有的依赖都放在顶层的node_modules下,即使package.json中未指定的包,也会放在node_modules中,项目中如果引用了这些包,将会造成不必要的安全问题。具体请看这里