百度面试一面的准备

2015-09-25  本文已影响0人  BR

JS

1.call()  和 apply():

作用:扩充函数赖以运行的作用域;

这两个函数都是在特定的作用域中调用函数,实际上等于设置函数体内this对象的值;

apply()接收两个参数:一个是在其中运行函数的作用域,另一个是参数数组,第二个参数可以是Array实例,也可以是arguments对象;

function sum(num1,num2){

             return num1 + num2;

}

function callSum1(num1,num2){

           return sum.apply(this,arguments);  //传入arguments对象

}

function callSum2(num1,num2){

         return sum.apply(this,[num1,num2]);   //传入数组

}

call()和apply()方法的作用相同,接收参数的方式不同,传递给函数的参数必须逐个列举出来;

function sum(num1,num2){

         return num1 + num2;

}

function callsum(num1,num2){

        return sum.call(this,num1,num2);  //注意所有参数都是直接传递给函数

}

扩充函数运行的作用域:

window.color = "red";

var o = {color: "blue"}

function sayColor(){

         alert(this.color);

}

sayColor(); //red

sayColor.call(this); //red

sayColor.call(window); //red

sayColor.call(o); //blue

上述的例子中先将sayColor()放在了对象o中,然后通过o来调用sayColor()函数;

其他的扩展作用域的方法:

ES5中bind()方法,创建一个函数的实例,this值会被绑定到传给bind()函数的值;

window.color = "red";

var o = {color: "blue"}

function sayColor(){

           alert(this.color);

}

var objectSayColor = sayColor.bind(o);   //sayColor()里的this表示对象o,

objectColor(); //blue

sayColor()函数调用bind()并传入对象o,创建objectSayColor()函数,此时this代表对象o,即使是在全局变量下,函数

2.$(document).ready的原理:不是使用轮询法,使用window.onload

DOMContentLoaded,直接绑定在Document下,页面文档完全加载并解析完毕之后,会触发DOMContentLoaded事件,HTML文档不会等待样式文件,图片文件,子框架页面的加载(load事件可以用来检测HTML页面是否完全加载完毕(fully-loaded))。

但是IE下不支持这个属性,使用轮询法;

兼容不支持该事件的浏览器

在IE8中,可以使用readystatechange事件来检测DOM文档是否加载完毕.在更早的IE版本中,可以通过每隔一段时间执行一次document.documentElement.doScroll("left")来检测这一状态,因为这条代码在DOM加载完毕之前执行时会抛出错误(throw an error)。

3.事件委托,事件冒泡,事件捕获:

(1)事件委托:针对"事件处理程序过多"的问题的解决方案

                    利用事件冒泡,只指定一个事件处理程序,可以管理某一类型的所有事件;


百度一面


1.<!Doctype html>

     告诉浏览器文档渲染的类型;

2.[  ]==false;  //true       [  ] === false;  //true   ({}) == false; //false

    0==[]; //ture    0 == "  "; //true

NaN == NaN; //false

undefined == null;  // true

undefined === null;  //false

3.IE下如何触发标准盒子模型;

IE在怪异模式下显示为IE盒子模型,标准模式下为W3C标准盒子模型;

其他浏览器都是标准盒子模型

例如,如下会触发quirks模式:

文件类型描述缺失或不完整时;

遇到一个HTML 3或者更早的文档时;

使用HTML 4.0 Transitional或Frameset的文件类型描述且系统标识符(URI)不存在时;

在DOCTYPE声明之前出现SGML注释或者其它无法识别的内容时;

文档任何地方有错误时;

注释符相遇时出现末尾文字重复;

Internet Explorer 6也会在DOCTYPE声明之前出现XML声明时使用quirks模式。

各种解决方法已被制定以迫使Internet Explorer 5以及更早版本使用W3C盒模型显示网页。这些解决方法一般是利用Internet Explorer的CSS选择器作用的无关的缺陷以从浏览器中隐藏某些规则。这些解决方法中,最为熟知的是由Tantek Çelik,一个工作于IE for Mac时发现这个主意的前微软员工,开发的“盒模型hack”。它涉及到为IE for Windows指定一个宽度声明,随后使用另一个为CSS-兼容的浏览器指定的宽度重写它。第二条声明通过利用IE for Windows解析CSS规则的其它缺陷而从该浏览器中隐藏。

3.vertical-align设置元素的垂直对齐方式;

baseline 默认。元素放置在父元素的基线上。

sub 垂直对齐文本的下标。

super 垂直对齐文本的上标

top 把元素的顶端与行中最高元素的顶端对齐

text-top 把元素的顶端与父元素字体的顶端对齐

middle 把此元素放置在父元素的中部。

bottom 把元素的顶端与行中最低的元素的顶端对齐。

text-bottom 把元素的底端与父元素字体的底端对齐。

length

4.实现水平垂直居中:

html:

<div class="one"></div>

css:

.one{

      display: flex;

      align-item: center;

      content-justfiy: center;

}

常规的做法:

<div  class="main">

         <div  class="div">123</div>

</div>

.main{

       display: table;

}

.div{

     display:table-cell;

     vertical-align: middle;

     text-align:center;

}

BFC布局:

5.svg和canvas的区别;

6.输入一串英文句子,把每个单词的首字母大写并输出;

正则匹配:

function replaceFirstUpper(str){

str.toLowerCase();

          str.replace(/\b(\w)|\s(\w)/g,function(m){

               return m.toUpperCase();

         });

}


携程电面:

1.null 和 undefined 的区别;

2.NaN;

3.怎样找出一个父元素是否包含子元素

nodeName和tagName;

4.jQuery中如何选择类选择器和ID选择器

5.将多维数组转化成一个一维数组;

var mult_arr = [1,23,[1,3],[1,3[1[2,4]]]];

function forEachArr(arr){

          var   result = [ ];

          for(var i = 0,len = arr.length; i < len;i++){

                   if(arr[i]  instanceof   Array){

                               arguments.callee(forEachArr);

                    }else{

                               result.push(arr[i]);

                     }

                      return   result;

         }

}

console.log(forEachArr(arr));

7.什么是Ajax和JSON,它们的优缺点。

Ajax是异步JavaScript和XML,用于在Web页面中实现异步数据交互。

优点:

可以使得页面不重载全部内容的情况下加载局部内容,降低数据传输量

避免用户不断刷新或者跳转页面,提高用户体验

缺点:

对搜索引擎不友好(

要实现ajax下的前后退功能成本较大

可能造成请求数的增加

跨域问题限制

JSON是一种轻量级的数据交换格式,ECMA的一个子集

优点:轻量级、易于人的阅读和编写,便于机器(JavaScript)解析,支持复合数据类型(数组、对象、字符串、数字)

8.vertical-align 属性设置元素的垂直对齐方式,对应的值

baseline 默认。元素放置在父元素的基线上。

sub 垂直对齐文本的下标。

super 垂直对齐文本的上标

top 把元素的顶端与行中最高元素的顶端对齐

text-top 把元素的顶端与父元素字体的顶端对齐

middle 把此元素放置在父元素的中部。

bottom 把元素的顶端与行中最低的元素的顶端对齐。

text-bottom 把元素的底端与父元素字体的底端对齐。

length

% 使用 "line-height" 属性的百分比值来排列此元素。允许使用负值。

inherit 规定应该从父元素继承 vertical-align 属性的值。

8.对CSS3的理解:

CSS3是层叠样式表语言的最新发展,旨在扩展CSS2.1。它带来了很多期待已久的新事物,比如圆角,阴影,渐变,跳变或动画,以及新的布局,如多列,灵活的框或网格布局。

对HTML5的理解:

语义化的标签,新应用程序接口(API):

实时二维绘图

Canvas API:有关动态产出与渲染图形、图表、图像和动画的API[24]

定时媒体播放[25]

HTML5音频与视频:HTML5里新增的元素,它们为开发者提供了一套通用的、集成的、脚本式的处理音频与视频的API,而无需安装任何插件

离线存储数据库(离线网络应用程序)[26]

编辑[27]

拖放[28]

跨文档通信[29]

通讯/网络

Communication APIs:构建实时和跨源(cross-origin)通讯的两大基础: 跨文档通讯(Cross Document Messaging)与XMLHttpRequest Level 2。

浏览历史管理[30]

MIME和协议进程时表头登记[31][32]

微数据[33]

网页存储[34]

HTML5语义化的好处:

1.去掉或样式丢失的时候能让页面呈现清晰的结构:

2.屏幕阅读器(如果访客有视障)会完全根据你的标记来“读”你的网页.

3.使用标签语义化可以使PDA、手机等设备可能无法像普通电脑的浏览器一样来渲染网页(通常是因为这些设备对CSS的支持较弱).

4.搜索引擎的爬虫也依赖于标记.

HTTP状态码:

1XX:请求已被接受,需要继续处理,临时响应

2XX:请求已被服务器成功接收,理解,接受;

3XX:客户端采取进一步操作才能完成请求;

4XX:客户端的错误

403forbidden:服务器已经理解请求,但是拒绝执行;

404not found请求失败,希望请求的资源未在服务器上发现

5XX:服务器在处理请求时发生异常;

505服务器不支持或者拒绝支持在请求中使用的http版本;

5.跨域:由于同源策略的影响.a.com域名下的文件无法访问b.com或者是c.a.com下的域名下的对象

解决跨域的方法:

(1)document.domain+iframe;必须是主域名相同的时候才可以

(2)动态创建script标签

(3)利用iframe和location.hash

(4)window.name实现跨域数据传输

(5)HTML5中的postMessage

(6)利用flash

6.GET和POST请求的区别:

GET - 从指定的资源请求数据。

POST - 向指定的资源提交要被处理的数据

GET 方法

请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:

/test/demo_form.asp?name1=value1&name2=value2

POST 方法

请注意,查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.asp HTTP/1.1

Host: w3schools.com

name1=value1&name2=value2

有关 GET 请求的其他一些注释:                          有关 POST 请求的其他一些注释:

GET 请求可被缓存                                                        POST 请求不会被缓存

GET 请求保留在浏览器历史记录中                                POST 请求不会保留在浏览器历史记录中

GET 请求可被收藏为书签                                              POST 不能被收藏为书签

GET 请求不应在处理敏感数据时使用                            

GET 请求有长度限制                                                    POST 请求对数据长度没有要求

GET 请求只应当用于取回数据

1.this的用法

来自阮一峰:

(1)作为单纯的函数调用的时候,代表全局变量;

(2)作为方法调用的时候代表上级对象;

(3)作为构造函数调用的时候,代表新对象;

(4)apply,call()调用,作用是改变函数的调用对象,第一个参数表示改变后的调用这个函数的对象,this指的就是这第一个参数

(1)Global context;

console.log(this.document === document); // true

// In web browsers, the window object is also the global object:

console.log(this === window); // true

this.a = 37;

console.log(window.a); // 37

(2)Function context;//取决于函数是如何被调用的

Inside a function, the value of this depends on how the function is called.

Simple call

function f1(){

return this;

}

f1() === window; // global object

(3)As an object method

When a function is called as a method of an object, its this is set to the object the method is called on.

3.CSS优先级

优先级顺序

内联样式 > ID 选择器 > 伪类 > 属性选择器 > 类选择器 > 元素(类型)选择器 > 通用选择器(*)

4.XML和JSON

3.XML和JSON的优缺点对比

(1).可读性方面。

JSON和XML的数据可读性基本相同,JSON和XML的可读性可谓不相上下,一边是建议的语法,一边是规范的标签形式,XML可读性较好些。

(2).可扩展性方面。

XML天生有很好的扩展性,JSON当然也有,没有什么是XML能扩展,JSON不能的。

(3).编码难度方面。

XML有丰富的编码工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的编码明显比XML容易许多,即使不借助工具也能写出JSON的代码,可是要写好XML就不太容易了。

(4).解码难度方面。

XML的解析得考虑子节点父节点,让人头昏眼花,而JSON的解析难度几乎为0。这一点XML输的真是没话说。

(5).流行度方面。

XML已经被业界广泛的使用,而JSON才刚刚开始,但是在Ajax这个特定的领域,未来的发展一定是XML让位于JSON。到时Ajax应该变成Ajaj(Asynchronous Javascript and JSON)了。

(6).解析手段方面。

JSON和XML同样拥有丰富的解析手段。

(7).数据体积方面。

JSON相对于XML来讲,数据的体积小,传递的速度更快些。

(8).数据交互方面。

JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

(9).数据描述方面。

JSON对数据的描述性比XML较差。

(10).传输速度方面。

JSON的速度要远远快于XML。

4.闭包:

闭包就是嵌套在函数里面的内部函数,并且该内部函数可以访问外部函数中声明的所有局部变量、参数和其他内部函数。当该内部函数在外部函数外被调用,就生成了闭包。(实际上任何函数都是全局作用域的内部函数,都能访问全局变量,所以都是window的闭包)

;()();可以立即执行,避免变量污染,但是要是闭包内引用类型的数据在闭包外被使用的话,那么这个闭包就无法释放,一直占用内存,前面的语句加分号的理由:为什么在前面加一个分号,其原因就是防止前面的语句忘记加分号;

6.SVG和canvas的区别:

手写冒泡排序:

                                                                                                                                                                  
上一篇下一篇

猜你喜欢

热点阅读