史上最全面试题总结JavaScript

1.eval是做什么的?

它的功能是把对应的字符串解析成JS代码并运行; 应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。

nullundefined 的区别?

目前,nullundefined基本是同义的,只有一些细微的差别。
null表示"没有对象",即该处不应该有值。典型用法是:
1 作为函数的参数,表示该函数的参数不是对象。
2 作为对象原型链的终点。

Object.getPrototypeOf(Object.prototype)

// null

undefined表示"缺少值",就是此处应该有一个值,但是还没有定义。典型用法是:
1)变量被声明了,但没有赋值时,就等于undefined
2) 调用函数时,应该提供的参数没有提供,该参数等于undefined
3)对象没有赋值的属性,该属性的值为undefined
4)函数没有返回值时,默认返回undefined

var i;

i // undefined

 

function f(x){console.log(x)}

f() // undefined

 

var  o = new Object();

o.p // undefined

 

var x = f();

x // undefined

写一个通用的事件侦听器函数

    // event(事件)工具集,来源:github.com/markyun

  markyun.Event = {

      // 页面加载完成后

      readyEvent : function(fn) {

          if (fn==null) {

              fn=document;

          }

          var oldonload = window.onload;

          if (typeof window.onload != 'function') {

              window.onload = fn;

          } else {

              window.onload = function() {

                  oldonload();

                  fn();

              };

          }

      },

      // 视能力分别使用dom0||dom2||IE方式 来绑定事件

      // 参数: 操作的元素,事件名称 ,事件处理程序

      addEvent : function(element, type, handler) {

          if (element.addEventListener) {

              //事件类型、需要执行的函数、是否捕捉

              element.addEventListener(type, handler, false);

          } else if (element.attachEvent) {

              element.attachEvent('on' + type, function() {

                  handler.call(element);

              });

          } else {

              element['on' + type] = handler;

          }

      },

      // 移除事件

      removeEvent : function(element, type, handler) {

          if (element.removeEnentListener) {

              element.removeEnentListener(type, handler, false);

          } else if (element.datachEvent) {

              element.detachEvent('on' + type, handler);

          } else {

              element['on' + type] = null;

          }

      },

      // 阻止事件 (主要是事件冒泡,因为IE不支持事件捕获)

      stopPropagation : function(ev) {

          if (ev.stopPropagation) {

              ev.stopPropagation();

          } else {

              ev.cancelBubble = true;

          }

      },

      // 取消事件的默认行为

      preventDefault : function(event) {

          if (event.preventDefault) {

              event.preventDefault();

          } else {

              event.returnValue = false;

          }

      },

      // 获取事件目标

      getTarget : function(event) {

          return event.target || event.srcElement;

      },

      // 获取event对象的引用,取到事件的所有信息,确保随时能使用event

      getEvent : function(e) {

          var ev = e || window.event;

          if (!ev) {

              var c = this.getEvent.caller;

              while (c) {

                  ev = c.arguments[0];

                  if (ev && Event == ev.constructor) {

                      break;

                  }

                  c = c.caller;

              }

          }

          return ev;

      }

  };

你用闭包来做什么?如果你有最喜欢的应用场景,举一些例子。

DOM操作——怎样添加、移除、移动、复制、创建和查找节点。

1)创建新节点
      createDocumentFragment()    //创建一个DOM片段
      createElement()   //创建一个具体的元素
      createTextNode()   //创建一个文本节点
2)添加、移除、替换、插入
      appendChild()
      removeChild()
      replaceChild()
      insertBefore() //在已有的子节点前插入一个新的子节点
3)查找
      getElementsByTagName()    //通过标签名称
      getElementsByName()    //通过元素的Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name值的)
      getElementById()    //通过元素Id,唯一性

html5有哪些新特性、移除了那些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分 HTML HTML5

* HTML5 现在已经不是SGML 的子集,主要是关于图像,位置,存储,多任务等功能的增加。
* 拖拽释放(Drag and drop) API
  语义化更好的内容标签(header,nav,footer,aside,article,section
音频、视频API(audio,video)
画布(Canvas) API
  地理(Geolocation) API
  本地离线存储localStorage 长期存储数据,浏览器关闭后数据不丢失;
  sessionStorage 的数据在浏览器关闭后自动删除
  表单控件,calendardatetimeemailurlsearch
  新的技术webworker, websocket, Geolocation* 移除的元素
纯表现的元素:basefontbigcenterfont, sstrikettu
对可用性产生负面影响的元素:frameframesetnoframes
支持HTML5新标签:
* IE8/IE7/IE6支持通过document.createElement方法产生的标签,
  可以利用这一特性让这些浏览器支持HTML5新标签,
  浏览器支持新标签后,还需要添加标签默认的样式:
* 当然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架
   
如何区分: DOCTYPE声明\新增的结构元素\功能元素

8.iframe的优缺点?

1.