高频前端面试题2(持续更新 含答案)

1,HTML5 新增的语义化标签有哪些?

语义化标签优点:1.提升可访问性 2.seo 3.结构清晰,利于维护

Header 页面头部

main 页面主要内容

footer 页面底部

Nav 导航栏

aside 侧边栏

article 加载页面一块独立内容

Section 相 当 于 div

figure 加 载 独 立 内 容 ( 上 图 下 字 )

figcaption figure 的标题

Hgroup 标题组合标签

mark 高亮显示 dialog

加载对话框标签(必须配合 open 属性)

Embed 加载插件的标签

video 加载视频

audio 加载音频(支持格式ogg,mp3,wav)

2,CSS3 新增的特性

边框:

border-radius 添加圆角边框

border-shadow:给框添加阴影 (水平位移,垂直位移,模糊半径,阴影尺寸,阴影颜色,insetr(内/外部阴影))

border-image:设置边框图像

border-image-source 边框图片的路径

border-image-slice 图片边框向内偏移

border-image-width 图片边框的宽度

border-image-outset 边框图像区域超出边框的量

border-image-repeat 图像边框是否平铺(repeat 平铺 round 铺满stretch 拉伸)

背景:

Background-size 背景图片尺寸

Background-origin规定background-position属性相对于什么位置定位

Background-clip 规定背景的绘制区域(padding-box,border-box,

content-box)

渐变:

Linear-gradient()线性渐变

Radial-gradient()径向渐变

文本效果:

Word-break:定义如何换行

Word-wrap:允许长的内容可以自动换行

Text-overflow:指定当文本溢出包含它的元素,应该干啥

Text-shadow:文字阴影(水平位移,垂直位移,模糊半径,阴影颜色)

转换:

Transform 应用于 2D3D 转换,可以将元素旋转,缩放,移动,倾斜

Transform-origin 可以更改元素转换的位置,(改变 xyz 轴)

Transform-style 指定嵌套元素怎么样在三位空间中呈现

2D 转换方法:

rotate 旋转 translate(x,y)指定元素在二维空间的位移 scale(n)定义缩放转换

3D 转换方法

Perspective(n)为 3D 转换 translate rotate scale

过渡:

Transition-proprety 过渡属性名

Transition-duration 完成过渡效果需要花费的时间

Transition-timing-function 指定切换效果的速度

Transition-delay 指定什么时候开始切换效果

动画:animation

Animation-name 为@keyframes 动画名称

animation-duration 动画需要花费的时间

animation-timing-function 动画如何完成一个周期

animation-delay 动画启动前的延迟间隔

animation-iteration-count 动画播放次数

animation-direction 是否轮流反向播放动画

3,清除浮动的方式有哪些?请说出各自的优点

高度塌陷:当所有的子元素浮动的时候,且父元素没有设置高度,这时

候父元素就会产生高度塌陷。

清除浮动方式 1

给父元素单独定义高度

优点:快速简单,代码少 缺点:无法进行响应式布局

清除浮动方式 2

父级定义 overflow:hidden;zoom:1(针对 ie6 的兼容)

优点:简单快速、代码少,兼容性较高 缺点:超出部分被隐藏,布局时

要注意

清除浮动方式 3

在浮动元素后面加一个空标签,clear:both;height:0;overflow:hidden

优点:简单快速、代码少,兼容性较高。

缺点:增加空标签,不利于页面优化

清除浮动方式 4:

父级定义 overflow:auto

优点:简单,代码少,兼容性好

缺点:内部宽高超过父级 div 时,会出现滚动条

清除浮动方式 5:

万能清除法:

给塌陷的元素添加伪对象

.father:after{
   Content:“随便写”;
   Clear:both;
   display:block;
   Height:0;
   Overflow:hidden;
   Visibility:hidden
}

优点:写法固定,兼容性高

缺点:代码多

4,Vue双向数据绑定?原理?

   <div id="app">
        <input type="text" id="input">
        <span id="span"></span>
    </div>

    <script>
        let obj = {};
        let val = '' // 初始值
        Object.defineProperty(obj, 'val', {
            get () {
                return val
            },
            set (newvalue) {
                document.getElementById('input').value = newvalue
                document.getElementById('span').innerHTML = newvalue
            }
        })
        document.addEventListener('keyup', function (e) {
            obj.val = e.target.value
        })

        let vm = new Vue({
            el: '#app',
            data: {
            }
        })
    </script>

5,中央事件总线怎么完成两个组件间的传值

    <div id="app">
        <myll></myll>
        <myll2></myll2>
    </div>

    <script>

        // 通过bus进行兄弟组件传参
        let bus = new Vue()
        Vue.prototype.bus = bus

        Vue.component('myll', {
            data () {
                return {
                    name: '高启强',
                    msg: '开心一天是一天'
                }
            },
            template: `
           <div>
                  <input type="text" v-model="name">
                  <input type="text" v-model="msg">
                <button @click="add">点击传参</button>
           </div>
            `,
            methods: {
                add () {
                    this.bus.$emit('add', { name: this.name, msg: this.msg })
                }
            }
        })

        Vue.component('myll2', {
            data () {
                return {
                    name: '高启强',
                    msg: '开心一天是一天'
                }
            },
            template: `
         <div>
            <div>我叫:{
    
    {name}}</div>
             <div>个性签名:{
    
    {msg}}</div>
        </div>
            `,
            mounted () {
                this.bus.$on('add', (data) => {
                    this.name = data.name
                    this.msg = data.msg
                })
            }
        })

        let vm = new Vue({
            el: "#app",
            data: {
            }
        })

    </script>

6,如何判断一个数据是 NaN?

NaN 非数字 但是用 typeof 检测是 number 类型

利用 NaN 的定义 用 typeof 判断是否为 number 类型并且判断是否满

足 isnan

利用 NaN 是唯一一个不等于任何自身的特点 n!==n

利用 ES6 中提供的 Object.is()方法(判断两个值是否相等) n==nan

Js 中 null 与undefined 区别

相同点:用 if 判断时,两者都会被转换成 false

不同点:number 转换的值不同 number(null)为 0 number(undefined)为 NaN

Null 表示一个值被定义了,但是这个值是空值

Undefined 变量声明但未赋值

7.Ajax 如何使用

一个完整的 AJAX 请求包括五个步骤:

  • 创建一个XMLHttpRequest实例

  • 调用open方法,开始发送请求

  • 开始和服务端进行交互,调用send方法

  • 注册监听

  • 渲染页面

var xhr = new XMLHttpRequest()
// 调用open方法,开始发送请求
// xhr.open(参数一,参数二,参数三)
// 参数一:请求的方式:get(请求数据)/post(传递数据)
// // 参数二:请求地址  url http://ww  ./数据.json
// 参数三:是否异步 true--异步  false--同步
xhr.open('get', './数据.json', true)
// 开始和服务端进行交互,调用send方法
xhr.send()

// 注册监听
console.log(xhr);
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) {
    if (xhr.status === 200) {
        // 渲染页面
        // console.log(xhr.responseText);
        var text=JSON.parse(xhr.responseText)
        document.body.innerHTML=text[0].name
    }
}
}

猜你喜欢

转载自blog.csdn.net/al7lin/article/details/129006534
今日推荐