javascript常识

20 Jun 2013, by

什么时候为真什么时候为假

访问对象的属性

函数是一等公民

js原型链

调用函数时是否带括号区别

  foo; // 'undefined'
  foo(); // 出错:TypeError
  var foo = function() {};

函数名在函数内总是可见的。

var foo = function bar() {
    bar(); // 正常运行
}
bar(); // 出错:ReferenceError

获取document引用的方式:

==与===区别

var a=5;
var b='5';

alert(a==b);  //true    先转换类型,然后比较
alert(a===b); //false   不转换类型,直接比

obj.style与obj.currentStyle

定时器操作

scrollWidth,clientWidth与offsetWidth的区别:

DOM操作

JS的scrollLeft,clientWidth,offsetWidth等

函数定义方式function a(){}和a=function(){}区别

一般情况下两者的调用结果是一样的,一般会采用第一种写法避免代码污染,当需要保留原function使用第二种,第一种经过了优化。

function a(){
  alert('old');
}

var b = a;

function a(){
  b();
  alert('new');
}

a();  // 浏览器会出现内存溢出情况
function a(){
  alert('old');
}

var b = a;

var a = function(){
  b();
  alert('new');
}

a();  // 顺序打出'old','new'

关于Ajax

获取Class属性的方法:

function getByClass(oParent, sClass)
{
	// 找到网页中所有的class并存入数组
	var aEle = oParent.getElementsByTagName('*');
	var aResult = [];

	for (var i = 0; i < aEle.length; i++) {
		if (aEle[i].className == sClass)
		{
			aResult.push(aEle[i]);
		}
	}

	return aResult;
}

判断浏览器用来解决浏览器兼容问题:

    var userAgent = navigator.userAgent.toLowerCase();
    var browser = {
        version: (userAgent.match(/(?:firefox|opera|safari|chrome|msie)[\/: ]([\d.]+)/))[1],
        safari: /version.+safari/.test(userAgent),
        chrome: /chrome/.test(userAgent),
        firefox: /firefox/.test(userAgent),
        ie: /msie/.test(userAgent),
        opera: /opera/.test(userAgent)
    }
    if ( browser.ie && browser.version < 9 ) {
        alert("对不起,不兼容您的浏览器");
        window.location = "http://www.google.com/chrome";
    }

setInterval函数第一个参数

setInterval('a()', 300)     //表示可执行函数,使用全局变量
setInterval(a(), 300)       //不要使用
setInterval(a, 300)         //使用这个

取消冒泡(设置对象的cancelBubble属性为true)

oEvent.cancelBubble = true;

兼容性问题

function (ev)
{
  var oEvent=ev||event;
  ...
}

document.documentElement.scrollTop||document.body.scrollTop;