码迷,mamicode.com
首页 > Web开发 > 详细

Web前端相关知识(一)

时间:2015-03-05 22:20:12      阅读:656      评论:0      收藏:0      [点我收藏+]

标签:

1.判断字符串以字母开头,后面可以是数字,下划线,字母,长度为6-30

var reg=/^[a-zA-Z]{1}\w{6,30}$/;
2.请举例使用callee属性实现函数的递归使用
var sum=function(num){
    if(num<=1){
        return num;
    }
    else{
        return arguments.callee(num-1)*num;
    }
}

console.log("10!=="+sum(10));

3.Ajax同步和异步的区别,如何解决跨域问题?

4.apply和call方法有形似之处,请说出二者的区别

答案:apply固定是两个参数,第一个是调用的对象,第二个是一个带有下标的数组
call接受的参数是不固定的,第一个是对象 ,第二个参数数量不确定

5.请解读一下javascript代码,并之处问题所在

var Obj=function(msg){
                    this.msg=msg;
                    this.shout=function(){
                                  alert(this.msg);
                   }
                  this.waitAndShout=function(){
                                  
                                setTimeout(this.shout, 2000);
                 }
        }
        var aa=new Obj("abc");
        aa.waitAndShout();
6.请给Array本地对象增加一个原型方法,他的用途是删除数组中重复的条目,并将新的数组返回
var arr=new Array("a","b","c","d","e","a","c");
        Array.prototype.selectSingle=function(){
                          var newArr=new Array();

                        for(var i=0;i<arr.length;i++)
                       {
                                              if(!isIn(newArr,arr[i])){
                                                               newArr.push(arr[i]);
                                       }        
                       }
                      return newArr;
        }
        function isIn(arr,value){
                          for(var i=0;i<arr.length;i++){
                                      if(value==arr[i])
                                     {
                                                   return true;
                                     }
                             }
                    return false;
        }
        arr=arr.selectSingle();
        for(var i=0;i<arr.length;i++)
        {
                          console.log(arr[i]);
        }
7.以下代码中 end字符串什么时候输出
var t=true;
setTimeout(function(){
       console.log(123);
        t=false;
    },1000);

while(t)
{ }
console.log(‘end‘);

8.如果是3.00元,则转为300分,如果是300分,则转为3.00元

9.前端优化

10.如果在某一个位置插入一个DIV对象 例如:在下面的 aId 和 bId 间插入一个 DIV对象

<div>
        <div id=”aId”>a</div>
        <div id=”bId”>b</div>
        <div id=”cId”>c</div>
        <div id=”dId”>d</div>
</div>

11.XMLHTTPRequest的几个状态

12.对WEB标准以及W3C的理解与认识

标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外链css和js脚本、结构行为表现的分离、文件下载与页面速度更快、内容能被更多的用户所访问、内容能被更广泛的设备所访问、更少的代码和组件,容易维护、改版方便,不需要变动页面内容、提供打印版本而不需要复制内容、提高网站易用性;

 

13.xhtml和html有什么区别

HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言
最主要的不同:
XHTML 元素必须被正确地嵌套。
XHTML 元素必须被关闭。
标签名必须用小写字母。
XHTML 文档必须拥有根元素。

 

14.Doctype? 严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?

用于声明文档使用那种规范(html/Xhtml)一般为 严格 过度 基于框架的html文档
加入XMl声明可触发,解析方式更改为IE5.5 拥有IE5.5的bug

 

15.行内元素有哪些?块级元素有哪些?CSS的盒模型?

块级元素:div p h1 h2 h3 h4 form ul
行内元素: a b br i span input select
Css盒模型:内容,border ,margin,padding

 

16.CSS引入的方式有哪些? link和@import的区别是?

内联 内嵌 外链 导入   
区别 :同时加载
       前者无兼容性,后者CSS2.1以下浏览器不支持
   Link 支持使用javascript改变样式,后者不可

 

17.CSS选择符有哪些?哪些属性可以继承?优先级算法如何计算?内联和important哪个优先级高?

标签选择符  类选择符 id选择符

继承不如指定   Id>class>标签选择

后者优先级高

 

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

结构层 Html 表示层 CSS 行为层 js

 

19.css的基本语句构成是?

选择器{属性1:值1;属性2:值2;……}

 

20.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么?

e(Ie内核)  火狐(Gecko) 谷歌(webkit) opear(Presto)

 

21.写出几种IE6 BUG的解决方法

1.双边距BUG float引起的  使用display
2.3像素问题 使用float引起的 使用dislpay:inline -3px  
3.超链接hover 点击后失效  使用正确的书写顺序 link visited hover active
4.Ie z-index问题 给父级添加position:relative
5.Png 透明 使用js代码 改
6.Min-height 最小高度 !Important 解决’
7.select 在ie6下遮盖 使用iframe嵌套
8.为什么没有办法定义1px左右的宽度容器(IE6默认的行高造成的,使用over:hidden,zoom:0.08 line-height:1px)

22.<img>标签上title与alt属性的区别是什么?

Alt 当图片不显示是 用文字代表。
Title 为该属性提供信息

23.描述css reset的作用和用途。

Reset重置浏览器的css默认属性        浏览器的品种不同,样式不同,然后重置,让他们统一

24.解释css sprites,如何使用。

Css 精灵 把一堆小的图片整合到一张大的图片上,减轻服务器对图片的请求数量

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

盒子模型 渲染模式的不同
使用 window.top.document.compatMode 可显示为什么模式

26.你如何对网站的文件和资源进行优化?期待的解决方案包括:

文件合并
文件最小化/文件压缩
使用CDN托管
缓存的使用

27.什么是语义化的HTML?

直观的认识标签  对于搜索引擎的抓取有好处

28.清除浮动的几种方式,各自的优缺点

1.使用空标签清除浮动 clear:both(理论上能清楚任何标签,,,增加无意义的标签)
2.使用overflow:auto(空标签元素清除浮动而不得不增加无意代码的弊端,,使用zoom:1用于兼容IE)
3.是用afert伪元素清除浮动(用于非IE浏览器)

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

Object number function boolean underfind

 

30.例举3种强制类型转换和2种隐式类型转换?

强制(parseInt,parseFloat,number)
隐式(== – ===)

31..split() join() 的区别

前者是切割成数组的形式,后者是将数组转换成字符串

32.数组方法pop() push() unshift() shift()

Push()尾部添加 pop()尾部删除
Unshift()头部添加  shift()头部删除

33.事件绑定和普通事件有什么区别

34.IE和DOM事件流的区别

1.执行顺序不一样、
2.参数不一样
3.事件加不加on
4.this指向问题

35.IE和标准下有哪些兼容性的写法

Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target

 

36.ajax请求的时候get 和post方式的区别

一个在url后面 一个放在虚拟载体里面
有大小限制
安全问题
应用不同 一个是论坛等只需要请求的,一个是类似修改密码的

37.call和apply的区别

Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)

38.ajax请求时,如何解释json数据

使用eval parse 鉴于安全性考虑 使用parse更靠谱

39.b继承a的方法

40.写一个获取非行间样式的函数

function getStyle(obj,attr,value)

        {

            if(!value)

            {

                if(obj.currentStyle)

                {

                    return obj.currentStyle(attr)

                }

                else

                {

                    obj.getComputedStyle(attr,false)

                }

            }

            else

            {

                obj.style[attr]=value

            }

        }

41.事件委托是什么

让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

 

42.包是什么,有什么特性,对页面有什么影响

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

43.如何阻止事件冒泡和默认事件

canceBubble   return false

44.添加 删除 替换 插入到某个接点的方法

obj.appendChidl()
obj.innersetBefore
obj.replaceChild
obj.removeChild

 

45.解释jsonp的原理,以及为什么不是真正的ajax

动态创建script标签,回调函数
Ajax是页面无刷新请求数据操作

46.javascript的本地对象,内置对象和宿主对象

本地对象为array obj regexp等可以new实例化
内置对象为gload Math 等不可以实例化的
宿主为浏览器自带的document,window 等

47.document load 和document ready的区别

Document.onload 是在结构和样式加载完才执行js
Document.ready原生种没有这个方法,jquery中有 $().ready(function)

48.”==”和“===”的不同

前者会自动转换类型
后者不会

49.javascript的同源策略

一段脚本只能读取来自于同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合

50.编写一个数组去重的方法

function oSort(arr)

        {

            var result ={};

            var newArr=[];

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

            {

                if(!result[arr[i]])

                {

                    newArr.push(arr[i])

                    result[arr[i]]=1

                }

            }

            return newArr

        }

51.排序算法

快速排序function oSort(arr)

        {

            if(arr.length<=1)

            {

                return arr

            }

            var left=[];

            var right=[];

            var oNum = Math.floor(arr.length/2);

            var oNumVode = arr.splice(oNum,1);

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

            {

                if(arr[i]<oNumVode)

                {

                    left.push(arr[i])

                }

                else

                {

                    right.push(arr[i])

                }

            }

            return oSort(left).concat([oNumVode],oSort(right))

        }

冒泡排序 var array = [5, 4, 3, 2, 1];

var temp = 0;

for (var i = 0; i < array.length; i++)

{

for (var j = 0; j < array.length - i; j++)

{

if (array[j] > array[j + 1])

{

temp = array[j + 1];

array[j + 1] = array[j];

array[j] = temp;

}

}

}

52.什么是AJAX,为什么要使用Ajax(请谈一下你对Ajax的认识

什么是ajax:
AJAX是“Asynchronous JavaScript and XML”的缩写。他是指一种创建交互式网页应用的网页开发技术。
Ajax包含下列技术:
基于web标准(standards-basedpresentation)XHTML+CSS的表示;
使用 DOM(Document ObjectModel)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用 XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript 将所有的东西绑定在一起。

53.为什么要用ajax:

Ajax应用程序的优势在于:
1. 通过异步模式,提升了用户体验
2. 优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用
3. Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大用户量下的服务器负载。
2、AJAX最大的特点是什么。
Ajax可以实现动态不刷新(局部刷新)
就是能在不更新整个页面的前提下维护数据。这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变过的信息。

54.请介绍一下XMLhttprequest对象。

Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。

55.AJAX技术体系的组成部分有哪些。

HTML,css,dom,xml,xmlHttpRequest,javascript

56.AJAX应用和传统Web应用有什么不同。

在传统的Javascript编程中,如果想得到服务器端数据库或文件上的信息,或者发送客户端信息到服务器,需要建立一个HTML form然后GET或者POST数据到服务器端。用户需要点击”Submit”按钮来发送或者接受数据信息,然后等待服务器响应请求,页面重新加载。
因为服务器每次都会返回一个新的页面, 所以传统的web应用有可能很慢而且用户交互不友好。
使用AJAX技术, 就可以使Javascript通过XMLHttpRequest对象直接与服务器进行交互。
通过HTTP Request, 一个web页面可以发送一个请求到web服务器并且接受web服务器返回的信息(不用重新加载页面),展示给用户的还是通一个页面,用户感觉页面刷新,也看不到到Javascript后台进行的发送请求和接受响应。

57.AJAX请求总共有多少种CALLBACK。

Ajax请求总共有八种Callback
onSuccess
onFailure
onUninitialized
onLoading
onLoaded
onInteractive
onComplete
onException

58.Ajax和javascript的区别。

javascript是一种在浏览器端执行的脚本语言,Ajax是一种创建交互式网页应用的开发技术 ,它是利用了一系列相关的技术其中就包括javascript。
Javascript是由网景公司开发的一种脚本语言,它和sun公司的java语言是没有任何关系的,它们相似的名称只是一种行销策略。
在一般的web开发中,javascript是在浏览器端执行的,我们可以用javascript控制浏览器的行为和内容。
在 Ajax应用中信息是如何在浏览器和服务器之间传递的
      通过XML数据或者字符串

59.在浏览器端如何得到服务器端响应的XML数据。

XMLHttpRequest对象的responseXMl属性

60.XMLHttpRequest对象在IE和Firefox中创建方式有没有不同。

有,IE中通过new ActiveXObject()得到,Firefox中通过newXMLHttpRequest()得到

 

61.介绍一下XMLHttpRequest对象的常用方法和属性。

open(“method”,”URL”) 建立对服务器的调用,第一个参数是HTTP请求    方式可以为GET,POST或任何服务器所支持的您想调用的方式。
第二个参数是请求页面的URL。
    send()方法,发送具体请求
    abort()方法,停止当前请求
    readyState属性   请求的状态 有5个可取值0=未初始化 ,1=正在加载
    2=以加载,3=交互中,4=完成
    responseText 属性  服务器的响应,表示为一个串
    reponseXML 属性 服务器的响应,表示为XML
    status   服务器的HTTP状态码,200对应ok  400对应not found

 

62.什么是XML

XML是扩展标记语言,能够用一系列简单的标记描述数据

63.XML的解析方式

常用的用dom解析和sax解析。dom解析是一次性读取xml文件并将其构造为DOM对象供程序使用,优点是操作方便,但是比较耗内存。Sax是按事件驱动的方式解析的,占用内存少,但是编程复杂

64.你采用的是什么框架(架包)

这题是必问的,一般也是最开始就会问到。
   在java中比较流行的有 dojo, Prototype , JQuery, Dwr, extjs  等等

65.如果熟悉某种ajax框架,他可能会问到怎样在程序中使用这种框架

DWR框架介绍
    DWR(DirectWeb Remoting)是一个WEB远程调用框架.利用这个框架可以让AJAX开发变得很简单.利用DWR可以在客户端利用JavaScript直接调用服务端的Java方法并返回值给JavaScript就好像直接本地客户端调用一样(DWR根据Java类来动态生成JavaScrip代码).
   DWR的实现原理是通过反射,将java翻译成javascript,然后利用回调机制,从而实现了javascript调用Java代码

66.介绍一下Prototype的$()函数,$F()函数,$A()函数都是什么作用

$() 方法是在DOM中使用过于频繁的document.getElementById() 方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。
$F()函数是另一个大收欢迎的“快捷键”,它能用于返回任何表单输入控件的值,比如textbox,drop-down list。这个方法也能用元素id或元素本身做为参数。
$A()函数能把它接收到的单个的参数转换成一个Array对象。

67.介绍一下XMLHttpRequest对象

通过XMLHttpRequest对象,Web开发人员可以在页面加载以后进行页面的局部更新。
AJAX开始流行始于Google在2005年使用的”Google Suggest”。
“Google Suggest”就是使用XMLHttpRequest对象来创建动态的Web接口:
当用户开始输入google的搜索框,Javascript发送用户输入的字符到服务器,然后服务器返回一个建议列表。
XMLHttpRequest对象在IE5.0+, Safari 1.2, Mozilla1.0/Firefox, Opera 8+ 和NetScapt7 开始被支持。

68.AJAX的全称是什么? 介绍一下AJAX?

AJAX的全称是Asynchronous JavaScript And XML.
AJAX是2005年由Google发起并流行起来的编程方法, AJAX不是一个新的编程语言,但是它是一个使用已有标准的新的编程技术。
使用AJAX可以创建更好,更快,更用户界面友好的Web应用。
AJAX技术基于Javascript和HTTP Request.

69.Ajax主要包含了哪些技术?

Ajax(Asynchronous JavaScript + XML)的定义
基于web标准(standards-based presentation)XHTML+CSS的表示;
使用 DOM(Document Object Model)进行动态显示及交互;
使用 XML 和 XSLT 进行数据交换及相关操作;
使用XMLHttpRequest 进行异步数据查询、检索;
使用 JavaScript 将所有的东西绑定在一起。英文参见Ajax的提出者Jesse James Garrett的原文,原文题目(Ajax: A New Approach to Web Applications)。
类似于DHTML或LAMP,AJAX不是指一种单一的技术,而是有机地利用了一系列相关的技术。事实上,一些基于AJAX的“派生/合成”式(derivative/composite)的技术正在出现,如“AFLAX”。
AJAX的应用使用支持以上技术的web浏览器作为运行平台。这些浏览器目前包括:Mozilla、Firefox、Internet Explorer、Opera、Konqueror及Safari。但是Opera不支持XSL格式对象,也不支持XSLT。

70.AJAX都有哪些优点和缺点?

1、最大的一点是页面无刷新,用户的体验非常好。
2、使用异步方式与服务器通信,具有更加迅速的响应能力。
3、可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本。并且减轻服务器的负担,ajax的原则是“按需取数据”,可以最大程度的减少冗余请求,和响应对服务器造成的负担。
4、基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。

ajax的缺点
1、ajax不支持浏览器back按钮。
2、安全问题 AJAX暴露了与服务器交互的细节。
3、对搜索引擎的支持比较弱。
4、破坏了程序的异常机制。
5、不容易调试。

 

71. 实现一个遍历数组或对象里所有成员的迭代器

var each = function(obj, fn){
        //+++++++++++答题区域+++++++++++
        



        //+++++++++++答题结束+++++++++++
};

try{
        
        var data1 = [4,5,6,7,8,9,10,11,12];
        var data2 = {
                "a": 4,
                "b": 5,
                "c": 6
        };
        
        console.group(data1);
        
        each(data1, function(o){
                if( 6 == this )
                        return true;
                else if( 8 == this )
                        return false;
                console.log(o + ": \"" + this + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------

        1: "4"
        2: "5"
        4: "7"

        ------------------*/
        
        console.group(data2);
        
        each(data2, function(v, n){
                if( 5 == this )
                        return true;
                console.log(n + ": \"" + v + "\"");
        });
        
        console.groupEnd();

        /*------[执行结果]------

        a: "4"
        c: "6"

        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

 

72.实现一个叫Man的类,包含attr, words, say三个方法。

var Man;
//+++++++++++答题区域+++++++++++





//+++++++++++答题结束+++++++++++

try{
        
        var me = Man({ fullname: "小红" });
        var she = new Man({ fullname: "小红" });
        
        console.group();
        console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
        console.groupEnd();
        /*------[执行结果]------

        我的名字是:小红
        我的性别是:<用户未输入>

        ------------------*/

        me.attr("fullname", "小明");
        me.attr("gender", "男");
        me.fullname = "废柴";
        me.gender = "人妖"; 
        she.attr("gender", "女");
        
        console.group();
        console.info("我的名字是:" + me.attr("fullname") + "\n我的性别是:" + me.attr("gender"));
        console.groupEnd();
        /*------[执行结果]------

        我的名字是:小明
        我的性别是:男

        ------------------*/
        
        console.group();
        console.info("我的名字是:" + she.attr("fullname") + "\n我的性别是:" + she.attr("gender"));
        console.groupEnd();
        /*------[执行结果]------

        我的名字是:小红
        我的性别是:女

        ------------------*/

        me.attr({
                "words-limit": 3,
                "words-emote": "微笑"
        });
        me.words("我喜欢看视频。");
        me.words("我们的办公室太漂亮了。");
        me.words("视频里美女真多!");
        me.words("我平时都看优酷!");
        
        console.group();
        console.log(me.say());
        /*------[执行结果]------

        小明微笑:"我喜欢看视频。我们的办公室太漂亮了。视频里美女真多!"

        ------------------*/

        me.attr({
                "words-limit": 2,
                "words-emote": "喊"
        });

        console.log(me.say());
        console.groupEnd();
        /*------[执行结果]------

        小明喊:"我喜欢看视频。我们的办公室太漂亮了。"

        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

 

73.实现一个URI解析方法,把url里#之后的参数解析成指定的数据结构。

function urlParser(s){
        //+++++++++++答题区域+++++++++++



                
        //+++++++++++答题结束+++++++++++
}

try{
        var url1 = "http://www.abc.com/m/s/#page/2/?type=latest_videos&page_size=20";
        var url2 = "http://www.abc.com/m/s/#type=latest_videos&page_size=20";
        var url3 = "http://www.abc.com/m/s/#page?type=latest_videos&page_size=20";

        console.group();
        console.info( urlParser(url1) );
        console.info( urlParser(url2) );
        console.info( urlParser(url3) );
        console.groupEnd();
        /*------[执行结果]------

        ["page", "2", { "type": "latest_videos", "page_size": 20 }]
        [{ "type": "latest_videos", "page_size": 20 }]
        ["page", { "type": "latest_videos", "page_size": 20 }]
        
        ------------------*/
        
}catch(e){
        console.error("执行出错,错误信息: " + e);
}

 

74.判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20

var reg = /^[a-zA-Z][a-zA-Z_0-9]{4,19}$/;
reg.test("a1a__a1a__a1a__a1a__");

 

75.截取字符串abcdefg的efg

var str = "abcdefg";
if (/efg/.test(str)) {
     var efg = str.substr(str.indexOf("efg"), 3);
     alert(efg);
}

 

76.判断一个字符串中出现次数最多的字符,统计这个次数

//将字符串的字符保存在一个hash table中,key是字符,value是这个字符出现的次数
var str = "abcdefgaddda";
var obj = {};
for (var i = 0, l = str.length; i < l; i++) {
        var key = str[i];
              if (!obj[key]) {
                 obj[key] = 1;
            } else {
                 obj[key]++;
              }
}
 
/*遍历这个hash table,获取value最大的key和value*/
var max = -1;
var max_key = "";
var key;
for (key in obj) {
         if (max < obj[key]) {
                   max = obj[key];
                   max_key = key;
       }
}
 
alert("max:"+max+" max_key:"+max_key);

 

77.IE与FF脚本兼容性问题

(1) window.event:
表示当前的事件对象,IE有这个对象,FF没有,FF通过给事件处理函数传递事件对象

(2) 获取事件源
IE用srcElement获取事件源,而FF用target获取事件源

(3) 添加,去除事件
IE:element.attachEvent(“onclick”, function) element.detachEvent(“onclick”, function)
FF:element.addEventListener(“click”, function, true) element.removeEventListener(“click”, function, true)

(4) 获取标签的自定义属性
IE:div1.value或div1[“value”]
FF:可用div1.getAttribute(“value”)

(5) document.getElementByName()和document.all[name]
IE;document.getElementByName()和document.all[name]均不能获取div元素
FF:可以

(6) input.type的属性
IE:input.type只读
FF:input.type可读写

(7) innerText textContent outerHTML
IE:支持innerText, outerHTML
FF:支持textContent

(8) 是否可用id代替HTML元素
IE:可以用id来代替HTML元素
FF:不可以

 

78.规避javascript多人开发函数重名问题

(1) 可以开发前规定命名规范,根据不同开发人员开发的功能在函数前加前缀
(2) 将每个开发人员的函数封装到类中,调用的时候就调用类的函数,即使函数重名只要类名不重复就ok

 

79.javascript面向对象中继承实现

function Animal(name) {
   this.name = name;
}
 
Animal.prototype.getName = function() {alert(this.name)}
function Dog() {};
Dog.prototype = new Animal("Buddy");
Dog.prototype.constructor = Dog;
var dog = new Dog();

 

80.FF下面实现outerHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>获取outerHMTL</title>
<style>
div{ background:#0000FF;width:100px;height:100px;}
span{ background:#00FF00;width:100px;height:100px;}
p{ background:#FF0000;width:100px;height:100px;}
</style>
</head>
<body>
<div id="a"><span>SPAN</span>DIV</div>
<span>SPAN</span>
<p>P</p>
<script type="text/javascript">
function getOuterHTML(id){
 var el = document.getElementById(id);
 var newNode = document.createElement("div");
 document.appendChild(newNode);
 var clone = el.cloneNode(true);
 newNode.appendChild(clone);
 alert(newNode.innerHTML);
 document.removeChild(newNode);
}
getOuterHTML("a");
</script>
</body>
</html>

 

81.

编写一个方法 求一个字符串的字节长度
假设:一个英文字符占用一个字节,一个中文字符占用两个字节

function GetBytes(str){
         var len = str.length;
         var bytes = len;
      for(var i=0; i<len; i++){
                    if (str.charCodeAt(i) > 255) bytes++;
      }
         return bytes;
}
alert(GetBytes("你好,as"));

 

82.编写一个方法 去掉一个数组的重复元素

var arr = [1 ,1 ,2, 3, 3, 2, 1];
Array.prototype.unique = function(){
         var ret = [];
         var o = {};
         var len = this.length;
         for (var i=0; i<len; i++){
                   var v = this[i];
                   if (!o[v]){
                                o[v] = 1;
                                ret.push(v);
                  }
       }
        return ret;
};
alert(arr.unique());

 

83.写出3个使用this的典型应用

(1)在html元素事件属性中使用,如:

<input type=”button” onclick=”showInfo(this);” value=”点击一下”/>
(2)构造函数
function Animal(name, color) {
         this.name = name;
         this.color = color;
}

(3)

<input type="button" id="text" value="点击一下" />
<script type="text/<a href="http://www.bairuiw.com/tag/javascript" class="st_tag internal_tag" rel="tag" title="Posts tagged with Javascript">javascript</a>">
var btn = document.getElementById("text");
btn.onclick = function() {
alert(this.value); //此处的this是按钮元素
}
</script>

(4)CSS expression表达式中使用this关键字

<table width="100px" height="100px">
     <tr>
              <td>
             <div style="width:expression(this.parentNode.width);">div element</div>
             </td>
     </tr>
</table>

 

84.如何显示/隐藏一个DOM元素?

el.style.display = "";
el.style.display = "none";

 

85.JavaScript中如何检测一个变量是一个String类型?请写出函数实现

String类型有两种生成方式:
(1)Var str = “hello world”;
(2)Var str2 = new String(“hello world”);

function IsString(str){
           return (typeof str == "string" || str.constructor == String);
}
var str = "";
alert(IsString(1));
alert(IsString(str));
alert(IsString(new String(str)));

 

86.. 网页中实现一个计算当年还剩多少时间的倒数计时程序,要求网页上实时动态显示“××年还剩××天××时××分××秒”

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   <title>倒计时</title>
</head>
<body>
<input type="text" value="" id="input" size="1000"/>
<script type="text/javascript">
   function counter() {
      var date = new Date();
      var year = date.getFullYear();
      var date2 = new Date(year, 12, 31, 23, 59, 59);
      var time = (date2 - date)/1000;
      var day =Math.floor(time/(24*60*60))
      var hour = Math.floor(time%(24*60*60)/(60*60))
      var minute = Math.floor(time%(24*60*60)%(60*60)/60);
      var second = Math.floor(time%(24*60*60)%(60*60)%60);
      var str = year + "年还剩"+day+"天"+hour+"时"+minute+"分"+second+"秒";
      document.getElementById("input").value = str;
   }
   window.setInterval("counter()", 1000);
</script>
</body>
</html>

 

87.补充代码,鼠标单击Button1后将Button1移动到Button2的后面

<div> <input type=”button” id =”button1″ value=”1″ onclick=”???”>
<input type=”button” id =”button2″ value=”2″ /”> </div>
<div>
          <input type="button" id ="button1" value="1" onclick="moveBtn(this);">
           <input type="button" id ="button2" value="2" />
</div>
<script type="text/javascript">
function moveBtn(obj) {
          var clone = obj.cloneNode(true);
          var parent = obj.parentNode;
          parent.appendChild(clone);
          parent.removeChild(obj);
}
</script>

 

88.JavaScript有哪几种数据类型

简单:Number,Boolean,String,Null,Undefined
复合:Object,Array,Function

 

89.下面css标签在JavaScript中调用应如何拼写,border-left-color,-moz-viewport

borderLeftColor
mozViewport

 

90.JavaScript中如何对一个对象进行深度clone

function cloneObject(o) {
        if(!o || ‘object‘ !== typeof o) {
            return o;
       }
       var c = ‘function‘ === typeof o.pop ? [] : {};
       var p, v;
       for(p in o) {
                     if(o.hasOwnProperty(p)) {
                         v = o[p];
                                     if(v && ‘object‘ === typeof v) {
                                         c[p] = Ext.ux.clone(v);
                                    }
                                    else {
                                       c[p] = v;
                         }
        }
    }
    return c;
};

 

91.如何控制alert中的换行

\n alert(“p\np”);

 

92.实现,鼠标点击页面中的任意标签,alert该标签的名称.(注意兼容性)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>鼠标点击页面中的任意标签,alert该标签的名称</title>
<style>
div{ background:#0000FF;width:100px;height:100px;}
span{ background:#00FF00;width:100px;height:100px;}
p{ background:#FF0000;width:100px;height:100px;}
</style>
<script type="text/javascript">
document.onclick = function(evt){
 var e = window.event || evt;
 var tag = e["target"] || e["srcElement"];
 alert(tag.tagName);
};
</script>
</head>
<body>
<div id="div"><span>SPAN</span>DIV</div>
<span>SPAN</span>
<p>P</p>
</body>
</html>

 

93.

请编写一个JavaScript函数 parseQueryString,它的用途是把URL参数解析为一个对象,如:
var url = “http://witmax.cn/index.php?key0=0&key1=1&key2=2″;

function parseQueryString(url){
           var params = {};
           var arr = url.split("?");
           if (arr.length <= 1)
                           return params;
           arr = arr[1].split("&");
           for(var i=0, l=arr.length; i<l; i++){
                           var a = arr[i].split("=");
                           params[a[0]] = a[1];
           }
           return params;
}
 
var url = "http://witmax.cn/index.php?key0=0&key1=1&key2=2";
var ps = parseQueryString(url);
alert(ps["key1"]);

 

94.ajax是什么? ajax的交互模型? 同步和异步的区别? 如何解决跨域问题?

Ajax是多种技术组合起来的一种浏览器和服务器交互技术,基本思想是允许一个互联网浏览器向一个远程页面/服务做异步的http调用,并且用收到的数据来更新一个当前web页面而不必刷新整个页面。该技术能够改进客户端的体验。包含的技术:
XHTML:对应W3C的XHTML规范,目前是XHTML1.0。

CSS:对应W3C的CSS规范,目前是CSS2.0
DOM:这里的DOM主要是指HTML DOM,XML DOM包括在下面的XML中
JavaScript:对应于ECMA的ECMAScript规范
XML:对应W3C的XML DOM、XSLT、XPath等等规范
XMLHttpRequest:对应WhatWG的Web Applications1.0规范(http://whatwg.org/specs/web-apps/current-work/)

同步:脚本会停留并等待服务器发送回复然后再继续
异步:脚本允许页面继续其进程并处理可能的回复

跨域问题简单的理解就是因为JS同源策略的限制,a.com域名下的JS无法操作b.com或c.a.com下的对象,具体场景如下:

PS:(1)如果是端口或者协议造成的跨域问题前端是无能为力的

(2) 在跨域问题上,域仅仅通过URL的首部来识别而不会尝试判断相同的IP地址对应的域或者两个域是否对应一个IP
前端对于跨域的解决办法:
(1) document.domain+iframe
(2) 动态创建script标签

 

95.什么是闭包?下面这个ul,如何点击每一列的时候alert其index?

<ul id=”test”>
    <li>这是第一条</li>
    <li>这是第二条</li>
    <li>这是第三条</li>
</ul>
(function A() {
        var index = 0;
        var ul = document.getElementById("test");
        var obj = {};
        for (var i = 0, l = ul.childNodes.length; i < l; i++) {
                    if (ul.childNodes[i].nodeName.toLowerCase() == "li") {
               var li = ul.childNodes[i];
                                  li.onclick = function() {
                                    index++;
                                    alert(index);
                                }
                   }
        }
})();

 

 

96.请给出异步加载js方案,不少于两种

默认情况javascript是同步加载的,也就是javascript的加载时阻塞的,后面的元素要等待javascript加载完毕后才能进行再加载,对于一些意义不是很大的javascript,如果放在页头会导致加载很慢的话,是会严重影响用户体验的。
异步加载方式:
(1) defer,只支持IE
(2) async:
(3) 创建script,插入到DOM中,加载完毕后callBack,见代码:

function loadScript(url, callback){
             var script = document.createElement("script")
             script.type = "text/javascript";
                            if (script.readyState){ //IE
                                         script.onreadystatechange = function(){
                                            if (script.readyState == "loaded" ||
                                                        script.readyState == "complete"){
                                                        script.onreadystatechange = null;
                                                        callback();
                                                     }
                                          };
                           } else { //Others: Firefox, Safari, Chrome, and Opera
                                   script.onload = function(){
                                     callback();
                              };
     }
    script.src = url;
    document.body.appendChild(script);
}

 

97.请设计一套方案,用于确保页面中JS加载完全。

var n = document.createElement("script");
n.type = "text/javascript";
//以上省略部分代码
//ie支持script的readystatechange属性
if(ua.ie){
   n.onreadystatechange = function(){
       var rs = this.readyState;
       if(‘loaded‘ === rs || ‘complete‘===rs){
           n.onreadystatechange = null;
           f(id,url); //回调函数
       }
};
//省略部分代码
//safari 3.x supports the load event for script nodes(DOM2)
   n.addEventListener(‘load‘,function(){
       f(id,url);
   });
//firefox and opera support onload(but not dom2 in ff) handlers for
//script nodes. opera, but no ff, support the onload event for link
//nodes.
}else{
   n.onload = function(){
       f(id,url);
   };
}

 

98.js中如何定义class,如何扩展prototype?

Ele.className = “***”; //***在css中定义,形式如下:.*** {…}
A.prototype.B = C;
A是某个构造函数的名字
B是这个构造函数的属性
C是想要定义的属性的值

 

99.如何添加html元素的事件,有几种方法.

(1) 为HTML元素的事件属性赋值
(2) 在JS中使用ele.on*** = function() {…}
(3) 使用DOM2的添加事件的方法 addEventListener或attachEvent

 

100.documen.write和 innerHTML的区别

document.write只能重绘整个页面
innerHTML可以重绘页面的一部分

 

101.多浏览器检测通过什么?

(1) navigator.userAgent
(2) 不同浏览器的特性,如addEventListener

 

102.js的基础对象有那些, window和document的常用的方法和属性列出来

String,Number,Boolean

Window:
方法:setInterval,setTimeout,clearInterval,clearTimeout,alert,confirm,open
属性:name,parent,screenLeft,screenTop,self,top,status

Document
方法:createElement,execCommand,getElementById,getElementsByName,getElementByTagName,write,writeln
属性:cookie,doctype,domain,documentElement,readyState,URL,

 

103.前端开发的优化问题

(1) 减少http请求次数:css spirit,data uri
(2) JS,CSS源码压缩
(3) 前端模板 JS+数据,减少由于HTML标签导致的带宽浪费,前端用变量保存AJAX请求结果,每次操作本地变量,不用请求,减少请求次数
(4) 用innerHTML代替DOM操作,减少DOM操作次数,优化javascript性能
(5) 用setTimeout来避免页面失去响应
(6) 用hash-table来优化查找
(7) 当需要设置的样式很多时设置className而不是直接操作style
(8) 少用全局变量
(9) 缓存DOM节点查找的结果
(10) 避免使用CSS Expression
(11) 图片预载
(12) 避免在页面的主体布局中使用table,table要等其中的内容完全下载之后才会显示出来,显示比div+css布局慢

 

104.如何控制网页在网络传输过程中的数据量

启用GZIP压缩
保持良好的编程习惯,避免重复的CSS,JavaScript代码,多余的HTML标签和属性

 

105.Flash、Ajax各自的优缺点,在使用中如何取舍?

Ajax的优势
(1) 可搜索性
(2) 开放性
(3) 费用
(4) 易用性
(5) 易于开发

Flash的优势
(1) 多媒体处理
(2) 兼容性
(3) 矢量图形 比SVG,Canvas优势大很多
(4) 客户端资源调度,比如麦克风,摄像头

Web前端相关知识(一)

标签:

原文地址:http://www.cnblogs.com/winyou/p/4316824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!