js基础面试题,慢慢更新中,根据到处看见的资料

1.javascript的typeof返回哪些数据类型。

答:首先写出答案,number boolean underfind string Object function 。总共有六个答案,typeof 能判断值类型,但是对引用类型并不是那么好用。看个例子

typeof  "abc" //string

typeof  123//number

typeof undefined //undefined
typeof true //boolean

typeof {} //object
typeof [] //object

typeof console.log //functiong

typeof能准确判断值类型,但是对引用类型不是那么好使。那值类型和又有什么区别,看个例子。

var a = [1,2,3];
var b = a;
a = [1,2,3,4];
alert(a);//1,2,3,4
alert(b); //1,2,3

//2.使用push(操作了引用的对象)
var a = [1,2,3];
var b = a;
a.push(4);
alert(a);//1,2,3,4
alert(b); //1,2,3,4

 在复制变量值时,基本类型会在变量对象上创建一个新值,再复制给新变量。此后,两个变量的任何操作都不会影响到对方;而引用类型是将存储在变量对象的值复制一份给新变量,但是两个变量的值都指向存储在堆中的一个对象,也就是说,其实他们引用了同一个对象,改变其中一个变量就会影响到另一个变量。

2,关于js的==和===的问题。

答:js中两个等号(==)和三个等号(===)的区别:

       1. "=="表示:equality -> 等同 的意思,"=="使用两个等号时,如果两边值的类型不同的时候,是要先先进行类型转换后,才能做比较。 

    2. "==="表示:identity -> 恒等 的意思,"==="使用三个等号时,是不需要做类型转换的,如果两边值的类型不同,就表示一定是不等的。

3,在if语句中会转化为false的点:

答:0,NAN,“”,null,false;、

4,js中常见的内置函数:

https://blog.csdn.net/u012396955/article/details/53941521;这篇博客介绍了很多

5,关于JSON的一些理解:

答:

 6,遍历对象的属性的方法有哪些:

答:

<script>  
var myDog = {
  "name": "Happy Coder",
  "legs": 4,
  "tails": 1,
  "friends": ["Free Code Camp Campers"]
};

for ( i in myDog)
{
alert(i);//属性名称
alert(myDog[i])    ;//属性值
}
</script>

这个使用一个for in遍历,还有个方法是

Object.keys();
var myDog = {
  "name": "Happy Coder",
  "legs": 4,
  "tails": 1,
  "friends": ["Free Code Camp Campers"]
};
console.log(Object.keys(myDog));//会把所有属性名作为一个数组集合输出

7,创建10个li,点击弹出序号:

这个了是考一个作用域的问题,代码贴下来,用了一个立即执行函数也就是闭包的方法。

 window.onload=function () {
        var i, a;
        for (i = 0; i < 10; i++) {
            (function (i) {
                a = document.createElement('a')
                a.innerHTML = i + '</br>';
                a.addEventListener('click', function (e) {
                    e.preventDefault()
                    alert(i)
                })
                document.body.appendChild(a)
            })(i)
        }
    }

这么写能存储i的值。没什么好说的。

8,同步和异步的理解:

首先看个很简单的例子,

   console.log(100)
    setTimeout(function () {
        console.log(200)
    },1000);
    console.log(300)

他会先打印100和300,过了一秒才打印200.

9,html5为什么只需要写<!doctype html>?

    答:html5不是基于sgml(标准通用标记语言),不需要对dtd文件进行引用,但是需要doctype来规范浏览器的行为,

    否则浏览器将开启怪异模式,而html4.01基于sgml,需要引入dtd,才能告知浏览器文档使用的文档类型

    html4.01有三个申明方式:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"  "http://www.w3.org/TR/html4/frameset.dtd">

10,行内元素有哪些?块级元素有哪些?空(void)元素有哪些?

    行内元素有:a b span img input select strong(强调的语气)

    块级元素有:div ul ol li dl dt dd h1 h2 h3 h4…p

    知名的空元素:

    <br> <hr> <img> <input> <link> <meta>

这里说一下<meta>标签:

    1,META标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、关键词、页面刷新。

2,<meta charset="UTF-8">这个是我们建立网页,编译器自带的只是说明了字符的使用。
3,<meta name="keywords" content="关于怎么吃香蕉的">
   <meta name="description" content="HTML中<meta>标签如何正确使用">
这是常见的seo告诉网页是干啥的。
4,还有个重要的属性,http-equiv.<meta http-equiv="content-type" content="text/html; charset=UTF-8">
告诉浏览器怎么识别你的网页。
5,还有就是移动端的一些规定。大概就这些了吧。

11,页面导入样式时,使用link和@import有什么区别?

答:1,link和import都是页面样式引入,然而link是xhtml除了能加载这个还能加载一些其他的。import只能加载css。

       2,link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。

       3,import有时候低版本不支持。

12, 常见浏览器的内核有哪些?

答,这个问题的话,就从四个最常见的浏览器来回答吧。

IE:Trident.

FireFox:Gecko

Chrome:Webkit

Opera7:Presto内核.

13,iframe有哪些优缺点?

首先iframes是文档的内联框架

答:优点:1,解决跨域问题

                  2,重载页面时不需要重载整个页面,只需要重载页面中的一个框架页

                 3,制作导航栏舒服。

缺点:1,不利于seo.

           2,增加服务器的http请求

   14, label的作用是什么?是怎么使用的?   

答:    Label 中有两个属性是非常有用的,一个是FOR、另外一个就是ACCESSKEY了。

1,当用户点击label时,就会触发控件。浏览器就会自动将焦点转到和标签相关的表单控件上。

简单点说,你点label,与label绑定的表单控件就会获取焦点。那怎么绑定就是用for属性了。

2,<Label FOR=”InputBox” ACCESSKEY=”N”>姓名</Label><input ID=”InputBox” type=”text”>

当你点击labei光标会转移到input文字框中,只能说算个快捷方式,感觉好像也没啥用。

 

15,实现不使用border,画出1px高的线,在不同浏览器下的Quirksmode和CSSCompat模式下都能保持一致的效果?

             <div style=”height:1px;overflow:hidden;background:red”></div>后面的什么兼容性看不懂。

 

16,介绍一下标准的css的盒子模型?与低版本IE的盒子模型有什么不同?

答:盒子模型有两种,分别是 ie 盒子模型和标准 w3c 盒子模型

    W3C 盒子模型的范围包括 margin、border、padding、content,并且 content 部分不包含其他部分

    IE 盒子模型的范围也包括 margin、border、padding、content,和标准 W3C 盒子模型不同的是:IE 盒子模型的 content 部分包含了 border 和 pading。

   值得一提的是border一个经常用到的场景,就是画什么三角形,四边形利用的是border的其实是一个等腰梯形。

 

  17,如何居中div,如何居中一个浮动元素?如何让绝对定位的div居中?

    第一种比较简单文本直接属性,盒子的话用margin :auto;

   1st,第一种是盒子绝对定位,top: 0; right: 0; bottom: 0; left: 0;然后设置margin: auto;随便说下理解吧。

.son { 
    position: absolute; 
    top: 0; right: 0; bottom: 0; left: 0;
}

    首先如果只设置top: 0或者right: 0是不行的。不设置盒子宽度,left,right,都是0那么盒子的宽度是个自适应。就等于父元素宽度。

      这时如果给盒子设置一个宽度。那就等于他自己的宽度自适应那个作废,然后根据left和top优先定位。

     这时在给盒子设置一个margin:auto;那么就有了计算空间了。上下自适应,左右自适应那么就垂直水平居中了。

   大概就是有了top:0,bottom:0;高度被子元素全部填充,然后有了具体高度,多余的填充空间被释放出来。然后用margin的属性就行了。

   2nd,绝对定位,然后left: 50%; top: 50%;然后magin-left:-自己宽度一半,margin-top:-自己高度一半。

3rd,常用的text-align,line-height。说下行高垂直居中的原理,给文本设置了行高,但是和文本高度是两回事,文本高度在行高里面有个上下间距不设置的话就是上下自适应所以。

这样就垂直居中了。

4th,浮动元素居中的话,可以先给浮动元素套个父盒子,父盒子用maring居中,然后在用子盒子给父盒子填满就行了。

5th,父元素浮动left:50%相对定位。子元素也浮动,right:50%。相对定位。原理是子元素挨着中线,然后向左移动50%。就居中了。

大概就这些了。

 

18,display有哪些值?说明他们的作用?

  block :块对象的默认值。

  none :隐藏对象,空间也隐藏了。

 inline :内联对象的默认值。

 

19,position的值relative和absolute的定位原点是什么?

答:有父元素都是找父元素,没父元素absolute的话是找浏览器的左上角,relative是找body

 

20,display设置为inline-block时,li与li之间有看不见的空白间隔是什么原因引起的?有什么解决办法?

答: 行框的排列会受到中间空白(回车空格等等)浏览器会把他渲染成一个空格,这些空白也会被应用样式,占据空间,所以会有间隔。

1,将所有<li>写在同一行。不足:代码不美观。

2,<ul>内的字符尺寸直接设为0,即font-size: 0。不足:<ul>中的其他字符尺寸也被设为0,需要额外重新设定其他字符尺寸。

 

21,在网页中的应该使用奇数还是偶数的字体?为什么呢?

   偶数字号相对更容易和 web 设计的其他部分构成比例关系

    使用奇数号字体不好的地方是,文本段落无法对齐

 

 22,请解释下为什么会出现浮动和什么时候需要清除浮动?清除浮动的方式?

答: a.添加新的元素 、应用 clear:both;//元素不允许旁边有浮动自己下去了,盒子为了包住他也下去了,然后高度被拉长。

 

       b.父级定义 overflow: auto(注意:是父级div也就是这里的 div.outer) 一个对seo比较友好,另个hidden对seo不是太友好

 

        在IE6中还需要触发 hasLayout ,例如 zoom:1;

 

      c.据说是最高大上的方法 :after

 

        方法:(注意:作用于浮动元素的父亲)IE6-7不支持:after,

 

        使用 zoom:1触发 hasLayout

 

        {zoom:1;} /*==for IE6/7 Maxthon2==*/

 

        :after {clear:both;content:’.’;display:block; 0;height: 0;visibility:hidden;}

 

 

23、元素竖向的百分比设定是相对于容器的高度吗?

 

    答:相对于父容器的宽度

 100%;
height:0;
padding-bottom:40%;
background: red;
这里宽度满,盒子高度等于百分之40.

24、什么是响应式设计?响应式设计的基本原理是什么?如何兼容较低版本的IE?

    答:一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。

        优点:

            面对不同分辨率设备灵活性强

            能够快捷解决多设备显示适应问题

        缺点:

            兼容各种设备工作量大,效率低下

            代码累赘,会出现隐藏无用的元素,加载时间加长

            其实这是一种折中性质的设计解决方案,多方面因素影响而达不到最佳效果

            一定程度上改变了网站原有的布局结构,会出现用户混淆的情况

25,null和undefined的区别?

null和undefined是数据类型Null和Undefine的一个仅有的值。

 null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

    null表示”没有对象”,即该处不应该有值

        (1) 作为函数的参数,表示该函数的参数不是对象。

        (2) 作为对象原型链的终点。

        (3)获取一个不存在的对象时,值为null,如获取一个不存在的DOM对象:

    undefined表示”缺少值”,就是此处应该有一个值,但是还没有定义

        (1)变量被声明了,但没有赋值时,就等于undefined。

        (2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。

        (3)对象没有赋值的属性,该属性的值为undefined。

        (4)函数没有返回值时,默认返回undefined。

26,

什么是闭包(closure)?为什么要用它?

 

    闭包就是能够读取其他函数内部变量的函数

    由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成”定义在一个函数内部的函数”。

    所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。

    闭包的用途:

    闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中

    重用变量又不能造成全局污染

 

27、js代码中”use strict”是什么意思?使用它区别是什么?

    进入”严格模式”的标志,老版本的浏览器会把它当作一行普通字符串,加以忽略

 

    将”use strict”放在脚本文件的第一行,则整个脚本都将以”严格模式”运行。如果这行语句不在第一行,则无效,整个脚本以”正常模式”运行。如果不同模式的代码文件合并成一个文件,这一点需要特别注意。

    (严格地说,只要前面不是产生实际运行结果的语句,”use strict”可以不在第一行,比如直接跟在一个空的分号后面。)

    将”use strict”放在函数体的第一行,则整个函数以”严格模式”运行

 

    因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中

 

    – 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

 

    – 消除代码运行的一些不安全之处,保证代码运行的安全;

 

    – 提高编译器效率,增加运行速度;

 

    – 为未来新版本的Javascript做好铺垫。

 

28、js中有一个函数,执行对象查找时,永远不会去查找原型,这个函数是什么?

    hasOwnProperty()函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true,否则返回false。该方法属于Object对象,由于所有的对象都”继承”了Object的对象实例,因此几乎所有的实例对象都可以使用该方法。

 

29,什么是window对象?什么是document对象?

    window它是一个顶层对象,而不是另一个对象的属性即浏览器的窗口。

    document对象是window对象的一个对象属性

30,document.write和innerHTML的区别?

    1.document.write是直接写入到页面的内容流,如果在写之前没有调用document.open, 浏览器会自动调用open。每次写完关闭之后重新调用该函数,会导致页面被重写。

    2.innerHTML则是DOM页面元素的一个属性,代表该元素的html内容。你可以精确到某一个具体的元素来进行更改。如果想修改document的内容,则需要修改document.documentElement.innerElement。

    3.两者都可动态包含外部资源如JavaScript文件

    通过document.write插入<script></script>元素会自动执行其中的脚本;

    大多数浏览器中,通过innerHTML插入<script></script>元素并不会执行其中的脚本

    innerHTML很多情况下都优于document.write,其原因在于其允许更精确的控制要刷新页面的那一个部分。

这里需要注意window.onload事件是在文档内容完全加载完毕再去执行事件处理函数,当然文档流已经关闭了,这个时候执行doucment.writ()函数会自动调用document.open()函数创建一个新的文档流,并写入新的内容,再通过浏览器展现,这样就会覆盖原来的内容。

31,call()和.apply()的含义和区别?

   每个函数都包含两个非继承而来的方法:call()方法和apply()方法

    1、call,apply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有call,apply属性。既然作为方法的属性,那它们的使用就当然是针对方法的了,这两个方法是容易混淆的,因为它们的作用一样,只是使用方式不同。

    2、语法:foo.call(this, arg1,arg2,arg3) == foo.apply(this, arguments) == this.foo(arg1, arg2, arg3);

    3、相同点:两个方法产生的作用是完全一样的。

    4、不同点:方法传递的参数不同,单个单数传入,另一个可以以数组方式传入

32,JQ和JQUI有啥区别?

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨是”write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。

jQuery UI 是建立在 jQuery JavaScript 库上的一组用户界面交互、特效、小部件及主题。

33,js的数据类型都有哪些?

    答:字符串、数字、布尔、数组、对象、Null、Undefined

34、已知ID的input输入框,希望获取这个输入框的输入值,怎么做?(不使用第三方框架)

    document.getElementById(id).value;

35,希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)

    document.getElementsByTagName(‘input’);

    遍历循环

36,设置一个已知ID的div和html内容为xxx,字体颜色设置为黑色?(不使用第三方框架)

    var div = document.getElementById(id);

    div.innerHTML = ”;

    div.style.color = ”;

37,

当一个dom节点被点击时,我们需要能够执行一个函数,应该怎么做?

    直接在DOM里绑定事件:”<div onclick=”test()”>xx</div>” …

     在JS里通过onclick绑定:xxx.onclick = test

     通过事件添加进行绑定:addEventListener(xxx, ‘click’, test)

      那么问题来了,Javascript的事件流模型都有什么?

    “事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播

    “事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的

    “DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡

ps:事件默认情况下采取的是事件冒泡的方法,addEventListener(eventfunctionuseCapture)

最后一个参数默认是false,也就是默认事件是冒泡,设置为true时是事件捕获,然后常见的阻止事件冒泡的方法

1.event.stopPropagation()方法

这是阻止事件的冒泡方法,不让事件向documen上蔓延,但是默认事件任然会执行,当你掉用这个方法的时候,如果点击一个连接,这个连接仍然会被打开,

2.event.preventDefault()方法

这是阻止默认事件的方法,调用此方法是,连接不会被打开,但是会发生冒泡,冒泡会传递到上一层的父元素;

3.return false  ;

这个方法比较暴力,他会同事阻止事件冒泡也会阻止默认事件;写上此代码,连接不会被打开,事件也不会传递到上一层的父元素;可以理解为return false就等于同时调用了event.stopPropagation()和event.preventDefault()

38,js的typeof返回哪些数据类型?

    有如下6种返回值:

1)number;

2)string;

3)boolean;

4)object

5)function

6)undefined;

有个值得的注意的是typeof(null)返回的是Object.

39,split() join()的区别?

    join() 方法用于把数组中的所有元素放入一个字符串。

    元素是通过指定的分隔符进行分隔的。

    指定分隔符方法join(“#”);其中#可以是任意

    与之相反的是split()方法:用于把一个字符串分割成字符串数组.

   一个将数组拼成字符串,一个将字符串分割为数组。

                    var num=[0,1,2,3,4,5,6,7,8,9];

        var num1=["a","b","c"];
var num3=["d","e","f"];
num.push(10);//将11放在数组的末尾。
num.push(11,12);//将12,13按顺序排好。放在末尾。
num.unshift(-1);//将-1放在开头
num.unshift(-3,-2);//然后-3打头,-2接着。
num.pop();//删除最后一个元素。
num.shift();//删除第一个元素。
num.splice(5,3);//第一个参数5,代表一个索引值。3代表删了从索引值为5开始的三个元素。这两个参数都是必须的,第三个参数是替代品
num.splice(5,0,2,3,4);//第一个还是个索引值,第二个代表删除为0,也就是添加了。从索引5开始的2,3,4,
var num2= num.concat(num1,num3);//链接两个数组。
删的都返回删的值,添加的都返回新数组的长度。
slice()不会改变赝本的数组,提取一部分东西。slice(start,end)如果没有end那么就是开始到结尾懂了吧。
replace()是个替换字符串的元素,replace(/要替换的/g,“替换的东西”)

40,js的本地对象,内置对象和宿主对象?

    本地对象:

        Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError官方定义好了的对象

    内置对象: Global 和 Math,内置对象是本地对象的一种

    宿主对象:所有的BOM和DOM对象都是宿主对象,是那些官方未定义,你自己构建的对象加上DOM和BOM对象组成的

关于window对象是宿主对象也就是在一定的环境中才会生成的对象(这里也就是指浏览器),而global对象是在任何环境中都存在的

 window对象,是global的一个子对象。浏览器环境下,global对象指的就是window对象。global对象是单体内置对象,即不依赖宿主环境的对象。而window对象依赖浏览器。

41,对web标准以及w3c的理解与认识?

    (1)web标准规范要求,书写标签必须闭合、标签小写、不乱嵌套,可提高搜索机器人对网页内容的搜索几率。— SEO

    (2)建议使用外链css和js脚本,从而达到结构与行为、结构与表现的分离,提高页面的渲染速度,能更快地显示页面的内容。

    (3)样式与标签的分离,更合理的语义化标签,使内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件, 从而降低维护成本、改版更方便

    (4)不需要变动页面内容,便可提供打印版本而不需要复制内容,提高网站易用性

42,XHTML是HTML 4.01和XML1.0的杂交,XHTML1.0是基于HTML4.01的

    HTML是一种基于标准通用标记语言(SGML)的应用,而XHTML则基于可扩展标记语言(XML),HTML和XHTML其实是平行发展的两个标准。本质上说,XHTML是一个过渡技术,结合了部分XML的强大功能及大多数HTML的简单特性。建立XHTML的目的就是实现HTML向XML的过渡

    1、XHTML要求正确嵌套

    2、XHTML所有元素必须关闭

    3、XHTML区分大小写

    4、XHTML属性值要加引号

    5、XHTML用id属性代替name属性

    6、属性值不能简写

    遵循w3c制定的web标准,能够使用户浏览者更方便的阅读,使网页开发者之间更好的交流。

43,css选择器有哪些?哪些属性可以继承?优先级算法如何计算?内联和import哪个级别更高?

    派生选择器,id选择器,类选择器,

    可继承的:font-size font-family color

    不可继承的:border padding margin background-color width height

    优先级:!important > [ id > class > tag ] important 比 内联优先级高

44,前端页面有哪三层构成,分别是什么?作用是什么?

    结构层、表示层、行为层

结构层(structural layer)

由 HTML 或 XHTML之类的标记语言负责创建。标签,也就是那些出现在尖括号里的单词,对网页内容的语义含义做出了描述,但这些标签不包含任何关于如何显示有关内容的信息。例如,P标签表达了这样一种语义:”这是一个文本段。”

表示层(presentation layer)

由 CSS 负责创建。 CSS对”如何显示有关内容”的问题做出了回答。

行为层(behaviorlayer)

负责回答”内容应该如何对事件做出反应”这一问题。这是 Javascript 语言和 DOM主宰的领域

45,

var numberArray = [3,6,2,4,1,5];

    1) 实现对该数组的倒排,输出[5,1,4,2,6,3]

  2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]

         var numberArray = [3,6,2,4,1,5];

         numberArray.reverse(); // 5,1,4,2,6,3

         numberArray.sort(function(a,b){ //6,5,4,3,2,1

         return b-a;

         })

 46,你能描述一下渐进增强和优雅降级之间的不同吗?

渐进增强就是让牛b的浏览器的效果更好,优雅降级就是让2b的浏览器在功能ok的情况下效果一般。

47,请解释一下什么是”语义化的 HTML”?

 语义化的HTML就是:标题用h1-h6,文字段落用p,列表用ul li,大致如此

<header></header>语义化标签头部,<footer></footer>语义化标签尾部。

<article></article>下面section的一个子集,完整一个图文板块,语意更明确。

<section></section>完整的一个板块。这些了是h5提出的一些语义化的标签。

48,请说出三种减少页面加载时间的方法。(加载时间指感知的时间或者实际加载时间)

    1.优化图片

    2.图像格式的选择(GIF:提供的颜色较少,可用在一些对颜色要求不高的地方)

    3.优化CSS(压缩合并css,如margin-top,margin-left…)

    4.网址后加斜杠(如www.campr.com/目录,会判断这个”目录是什么文件类型,或者是目录。)

    5.标明高度和宽度(如果浏览器没有找到这两个参数,它需要一边下载图片一边计算大小,如果图片很多,浏览器需要不断地调整页面。这不但影响速度,也影响浏览体验。

    当浏览器知道了高度和宽度参数后,即使图片暂时无法显示,页面上也会腾出图片的空位,然后继续加载后面的内容。从而加载时间快了,浏览体验也更好了。)

    6.减少http请求(合并文件,合并图片)。

49,浏览器标准模式和怪异模式之间的区别是什么?

1) 盒模型: IE下标准模式为标准w3c盒模型【content+padding+border+margin】,怪异模式为IE盒模型【content+margin:padding与border包含在content宽高中】 
2) 行内元素的垂直对齐:基于 Gecko 的浏览器【Mozilla Firefox、HotBrowser、Mozilla Suite、Camino】标准模式对齐至基线,怪异模式对齐至底部 
3) 怪异模式中,IE6/7/8都不认识!important声明 
4) 设置行内元素的高宽: 在Standards模式下,给等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。 
5) 使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效。

50,data-属性的作用是什么?

    data-为前端开发者提供自定义的属性,这些属性集可以通过对象的dataset属性获取,不支持该属性的浏览器可以通过 getAttribute方法获取

    <div data-author=”david” data-time=”2011-06-20″ data-comment-num=”10″>…</div>

    div.dataset.commentNum; // 10

51,解释下 CSS sprites,以及你要如何在页面或网站中使用它?

    CSS Sprites其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的”background-image”,”background- repeat”,”background-position”的组合进行背景定位,background-position可以用数字能精确的定位出背景图片的位置。

52,事件委托,或者事件代理,事件监听的原理及其应用?

答:事件委托是利用事件的冒泡原理来实现的,

window.onload = function(){
    var oUl = document.getElementById("ul1");
    var aLi = oUl.getElementsByTagName('li');
    for(var i=0;i<aLi.length;i++){
        aLi[i].onclick = function(){
            alert(123);
        }
    }
}
这个是点击li弹出123,这么做很麻烦。
window.onload = function(){
    var oUl = document.getElementById("ul1");
   oUl.onclick = function(){
        alert(123);
    }
}
这么就是li上面不用绑定事件,有点击事件交给他老爹ul去帮他做,但是点他老爹也会谈很烦,那么稍微限制下他老爹
window.onload = function(){
  var oUl = document.getElementById("ul1");
  oUl.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
         alert(123);
         alert(target.innerHTML);
    }
  }
}
传入一个事件参数,事件对象的作用是存下一些有用的信息。然后写了下兼容性。事件对象有个属性
ev.target || ev.srcElement叫做target。这个是target指向的是被点击的那个元素。然后
判断下是不是li,是的话在弹出内容。
事件监听的话也是绑定事件的一种方法。绑定事件,监听函数。element.addEventListener(event, function, useCapture)最后一个参数的意思是
是在捕获阶段执行,还是在冒泡阶段执行。简单点就是事件留采取哪种方式。一般默认是冒泡。
事件对象一般是默认的第一个参数传入,传入后就能使用这个事件对象了。

 53,简单介绍浏览器端的几种存储技术?

答:cookie数据始终在同源的http请求中携带(即使不需要),即cookie在浏览器和服务器间来回传递;而sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存;

cookie是与服务端通信,默认下生命周期短,传输的数据有限。优点:能用于和服务器端通信;当cookie快要过期时,可以重新设置而不是删除。安全性问题

被人拦截后那些人不用知道意义,再转发一次就行了。

localStorage:h5新特性,存储空间大很多。存储在本地没有时间限制。

缺点:浏览器要考虑兼容性,localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡

sessionStorage与localStorage的唯一一点区别就是localStorage属于永久性存储,而sessionStorage属于当会话结束的时候,sessionStorage中的键值对就会被清空。

 

大致来说:cookie能和服务端通信,但是要发送http请求相对也增大负担。其他的只能本地存储。cookie存储空间太小了,其他连个大很多。但是相对读取内容变大,页面

也会卡顿。locaStorage存储时间久,sessionStorage则会话结束就完了。

54,深拷贝,浅拷贝。

 

function simpleClone(initalObj) {    
      var obj = {};    
      for ( var i in initalObj) {
        obj[i] = initalObj[i];
      }    
      return obj;
    }

 

这是一个最简但的浅拷贝,利用for in遍历对象的属性,然后复制给新的对象。比如一些简单的值类型数字,字符串,就能复制下来。但是对于引用类型则

不是那么好使了。大家都知道,引用类型复制的其实是个指针,数据还是会改变。这时候就要深拷贝了。对于一些简单的数组这些类型的可以用JSON对象的

两个属性parse和stringgify。但是对函数不是那么好用所以一般采用递归

function deepClone(initalObj, finalObj) {    
  var obj = finalObj || {};    
  for (var i in initalObj) {        
    if (typeof initalObj[i] === 'object') {
      obj[i] = (initalObj[i].constructor === Array) ? [] : {};            
      arguments.callee(initalObj[i], obj[i]);
    } else {
      obj[i] = initalObj[i];
    }
  }    
  return obj;
}
var str = {};
var obj = { a: {a: "hello", b: 21} };
deepClone(obj, str);
console.log(str.a);

这里是个深拷贝的写法,利用了递归的写法,先判断属性是不是引用类型,然后判断是数组还是对象。然后返回一个空的给克隆对象。然后这次利用递归再来一次

脱掉引用类型的所有的外衣找到真正可以复制的值类型。相当于[[[[{a:2}]]]]给前面的外壳去了然后复制那个a:2;但是感觉没复制到属性名不知道也不知道对不对。

 

55,arguments的一些简单用法?

function showargs() {
    console.log( arguments );
}

showargs(1,2,a,b,c);
arguments[5]0:1,1:2,2:a,3:b,4:c;意思他形成像数组一样的存储方式。只是像而已并不是数组。然后介绍下arguments.callee为啥能成递归了?
functong a(){
var a=2;
cosole.log(
arguments.callee)

}
打印的结果是他返回了一个a函数,也就是和上面那个一样。

 56,( 1 )获取随机数的方法:__Math.radom()______。

  (2)JS中将一个变量强制改为浮点类型的方法:__parseFloat()______。

  (3)根据id获取元素的原生JS方法:__document.getElementById______。

  (4)将文档声明为HTML5文档类型,需要在文档头添加:___<! doctype html>_____。

  (5)Chrome浏览器的私有样式前缀:_-webkit_______。

  (6)CSS3设置圆角的属性名:___border-radius_____。

  (7)CSS中,#是根据____id____来选择元素,.是根据_class_______来选择元素。

  (8)form标签特有的属性请列举三个:________、________、________。

  (9)正则表达式中,$是什么意思:__(匹配)______。

  (10)typeof‘123’返回:___string____。

 还有一两个不知道的哪时候在查查,随便做了下,表格好像全忘了。

57,em px,rem 之间的区别:

px是固定的,也就是平时我们所说的像素

rem是相对于html根元素的,也是放大倍数,一般可以设置html的font-size然后rem是根据这个来设置大小的。

em是相对于父元素的放大倍数

默认情况下1rem=16px;

 

58,var x=foo();

   var foo=function () {
            return 2;
        };

        console.log(x);

这道题不算很难。变量的提前申明,然后给foo()赋值给x但是这时候函数还没有解析,所以会报错。

 

59,关于JSON的一些常识和用法?

答:1,JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)。

      2,JSON 是轻量级的文本数据交换格式。

    3,JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台

   JSON的值有那些?格式?

数字,字符串,逻辑值。数组,对象,null       格式: "name" : "菜鸟教程"名称,值对。

可以用点和[]来获取他的值。可以用delete来删除他的属性。

常用的一些方法,

1,JSON.parse:将JSON数据(字符串)转化为js对象。

2   JSON.stringify将js对象,也就是(json对象)转化为字符串。

3   JSON.eval 和JSON.parse基本一样的功能,但是他要执行里面的代码不推荐使用。

59.根据代码判断?

r n=(2).toString()
console.log(typeof(n));

 

答:首先根据字符串操作,那个n等于一个字符串‘2’,然后判断类型就是字符串了。

59.1 dom 的操作,常用的有哪些,如何创建、添加、移除、移动、复制、查找节点?

答:创建: document.createElement()

      添加 appendChild()
      移除 removeChild()
      移动 insertBefore()
      复制 cloneNode()
      查找 getElementById()
 
59.2  href和src的区别:
答:href标识超文本引用,用在linka等元素上,href是引用和页面关联,是在当前元素和引用资源之间建立联系

      src表示引用资源,表示替换当前元素,用在img,script,iframe上,src是页面内容不可缺少的一部分。

        一个是引入,一个是引用,引入不影响页面结构,引用影响。

59.3,css3新增的一些属性?

答:border-radius:这个是设置圆角的;border-shaow:给方框添加阴影;border-image:给边框设置图片;

      background-size :属性规定背景图片的尺寸;text-shadow:字体的阴影;

 

     word-wrap:允许那些文本超出盒子,然后放在下一排;

   

61:父组件与子组件传值?

答:首先在父组件注册子组件,<child message="hello">这是父组件,子组件

 

 

子组件用个props接受。可以稍微加强下,用个动态绑定v-bind:

随便说下v-bind:简写就是:就行了。主要用作属性的绑定,后面vue写多了慢慢能体会到这个的用法。

现在说下子组件向父组件传值:

子组件触发事件,像父组件传递一个

 onClickMe: function(){
        this.$emit('child-say',this.somedata);
      }

然后父组件在他的那个子标签里面监听这个事件

<component-a  v-on:child-say="listenToMyBoy"></component-a>
 listenToMyBoy: function (somedata){
              this.childWords = somedata
            }

父组件监听到后,然后执行函数把这个值获取到。然后这就是基本的了。

62,vue路由之间的跳转?

一般的几个导航标签直接用<router-link to="/singer">这个就行了。到了后面有些页面跳转一般是点击事件然后触发跳转。然后差不多就长这个样子:this.$router.push(this.id)。

页面的注册在router的index.js的那个文件里面可以设置默认路由。就先说那么多吧。


63,v-show和v-if的共同点,不同点?
答:v-show是通过修改元素的css的display来显示隐藏的,
然后v-if是直接删除和重建dom。

64,<keep-alive>的作用的用法?

:<keep-alive></keep-alive> 包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染。

65,请列举出3个Vue中常用的生命周期钩子函数?
1,beforecreated:el 和 data 并未初始化 。el是将实例化后的vue挂载到指定的dom元素中
2,created:完成了 data 数据的初始化,el没有。
3,beforeMount:完成了 el 和 data 初始化 ,然后先给坑占好了。还没渲染出来。
4,mounted :完成挂载。
5,beforeupdate 和update写的例子没怎么体现出差别。都是修改了数据,都触发了。
6,执行了destroy操作,改变数据,vue没有做出响应,估计托管了吧。

 66,

原文地址:https://www.cnblogs.com/manu-yyj/p/9139696.html