什么时候为真什么时候为假
- 真:true、非零数字、非空字符串、非空对象
- 假:false、0、’‘、空对象(NaN)、undefined
null
和undefined
不是对象,其他所有变量都是对象。
访问对象的属性
- 有两种方式来访问对象的属性,点操作符.或者中括号[]操作符。两种语法是等价的,但是中括号操作符在下面两种情况下依然有效 - 1.动态设置属性 - 2.属性名不是一个有效的变量名(比如属性名中包含空格,或者属性名是JS的关键词)。
函数是一等公民
- 函数可以作为实参或者返回值
js原型链
- 实例.proto = 函数.prototype
调用函数时是否带括号区别
- 方法会在执行前被解析,因此它存在于当前上下文的任意一个地方, 即使在函数定义体的上面被调用也是对的。由于赋值语句只在运行时执行,因此在相应代码执行之前, foo 的值缺省为 undefined:
foo; // 'undefined'
foo(); // 出错:TypeError
var foo = function() {};
函数名在函数内总是可见的。
var foo = function bar() {
bar(); // 正常运行
}
bar(); // 出错:ReferenceError
获取document引用的方式:
- getElementById: 返回一个指向具有指定Id属性的元素引用
- getElementsByTagName: 返回具有该标签的元素数组
==与===区别
var a=5;
var b='5';
alert(a==b); //true 先转换类型,然后比较
alert(a===b); //false 不转换类型,直接比
obj.style与obj.currentStyle
- obj.style 获取的是内联样式,即style属性中的值。
- obj.currentStyle 外部(使用)和内部(使用
定时器操作
- 开启定时器: setInterval 间隔型 setTimeout 延时型
- 停止定时器: clearInterval clearTimeout
scrollWidth,clientWidth与offsetWidth的区别:
- 内容区别: scrollWidth 是对象的实际内容的宽,不包边线宽度,会随对象中内容的多少改变(内容多了可能会改变对象的实际宽度)。 clientWidth 是对象可见的宽度,不包滚动条等边线,会随窗口的显示大小改变。 offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变。
- 用法区别: offsetwidth:是元素相对父元素的偏移宽度。等于border+padding+width clientwidth:是元素的可见宽度。等于padding+width scrollwidth:是元素的宽度且包括滚动部分。
DOM操作
- 创建DOM元素 createElement(标签名) 创建一个节点 appendChild(节点) 追加一个节点 例子:为ul插入li
- 插入元素 insertBefore(节点, 原有节点) 在已有元素前插入 例子:倒序插入li
- 删除DOM元素 removeChild(节点) 删除一个节点 例子:删除li
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
- 创建Ajax对象 ActiveXObject(“Microsoft.XMLHTTP”) XMLHttpRequest()
- 连接服务器 open(方法, 文件名, 异步传输) 同步和异步
- 发送请求 send()
- 请求状态监控 onreadystatechange事件 readyState属性:请求状态 0 (未初始化)还没有调用open()方法 1 (载入)已调用send()方法,正在发送请求 2 (载入完成)send()方法完成,已收到全部响应内容 3 (解析)正在解析响应内容 4 (完成)响应内容解析完成,可以在客户端调用了 status属性:请求结果 responseText
获取Class属性的方法:
- 标准浏览器已经开始支持getElementsByClassName()了,但IE9以下的浏览器还是不支持此属性,为了更好的在所有的浏览器里面通过className进行过滤筛选元素,可以通过以下getByClass()函数进行获取了。
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;