DOMContentLoaded事件触发时机,即dom tree完成但页面未必渲染完毕。
var a = [1,2,3,4];
var length = a.length;
alert((length - 1 in a)); 返回true
alert((length - 1 in a)); 返回true
当一个函数没有明确返回值的时候,实际上它返回 undifined
当函数参数遗漏没有赋值时,该值将传入 undefined ,超过函数定义的参数数量以后的值会被忽视
可以传入任意数量参数,然后从arguments获取
JavaScript 获取 float,因为float是保留关键字,所以:
IE浏览器:
obj.style.styleFloat = "left";
其他浏览器:
obj.style.cssFloat = "left";
Array.prototype.slice.call(arguments,1)该语句涉及两个知识点:
arguments是一个关键字,代表当前参数,在javascript中虽然arguments表面上以数组形式来表示,但实际上没有原生数组slice的功能,因为它不是Array()的实例,这里使用call方法算是对arguments对象不完整数组功能的修正。
Array.prototype.slice.call 其实是对slice方法进行的静态调用。
[].slice(begin,end);
在JS中,[]就是一个数组对象,在执行时,先会建立对象,再执行自身对象下的slice方法,对这个数组进行切割。
在JS中,[]就是一个数组对象,在执行时,先会建立对象,再执行自身对象下的slice方法,对这个数组进行切割。
slice()传入的长度为负数的时候,从后面开始算起:
"234567".slice(0,-2) 返回2345
注意:substring比 上面负slice和正则表达式来的快
简单值对象
当处于读取模式时,会实例化对应的对象,例如String,然后就可以使用上面的方法。如果是作为简单值调用的时候,实例化的对象就会被销毁。
typeof用来判断简单值(boolean,number,string),instanceof用来判断引用类型对象
如果代码有错误接下来的无法执行,而之前执行的代码(包括使用 window.setTimeout() 延迟执行的代码)依然能够使用。
null == undefined 虽然都输出true,但意义不同,undefined 表示定义了变量,但没有初始化变量,Null 代表一个不存在的对象
window.onload = fucntion() {}; == <body onload="func()">
因为 load 事件是发生在 window 对象上,但是在html 上没有代表 window 的标签 ,所以所以放到 body 元素上触发
arguments 提供 一个叫 arguments.callee 的属性,指向目前的函数,匿名函数的话可以用它来指向该函数
函数也是对象,因此可以 arguments.callee.something 把数据存储到该函数里
Number,String等简单值类似对象,因为它们有方法,但是这些方法不能改变,所以它们不是对象
var o = {};
o.x = new Object();
delete o.x; // 上一行new的Object对象依然存在
o.x; // undefined,o的名为x的属性被删除了
对象的属性在ECMAscript中是无序的,所以for in 循环返回的队列也是无法预测的,全部属性值都会被返回,但是返回的顺序各浏览器可能不同
元素的children属性只返回nodeType为element的子节点,childNodes会返回所有类型的。
ie浏览器会报告document ready状态,即使body元素还没有被创建,所以zepto在检测ready的时候添加了 && document.body是否存在body :
if (readyRE.test(document.readyState) && document.body) callback($)
innerText , innerHTML 和 outerText , outerHTML 相对应,但是outer 是用新对象替换掉原来的对象,它们也可以获取元素的内容,outerHTML 返回的值包括对象自己
当一个元素设置了margin之后,safari会自动把offsetLeft设为与marginLeft相等,offsetTop也一样
数组 length 不一定等于数组中项目的个数,它等于最高索引加1
var arr = [1,2,3];
arr[99] = 4; arr.length 就等于100了!
在javascript中 无论是整数还是带小数(float)的都是存储在同一种数据类型里
switch(1+3){
case 2+2:
alert(); switch里的值 和 case 在比较时使用 === 模式
break;
}
注意区别 没有定义的变量 和 定义了没有初始化的变量
var a; typeof a; 输出undefined
typeof b; 输出 b is not defined
检测是否支持:
var isSupported = document.implementation.hasFeature(“HTMLEvents”, “2.0”);
if(a){ alert(); } 可以用 a && alert() 替代,&& 和 || 可以有更多灵活使用
通常在框架里下划线的变量方法都是内部使用的
不应该把undefined赋给变量,因为undefined主要是拿来和数据做比较,直到ECMA-262才被添加进来,在第三版中用来和null做区别
Typeof 后面跟一个创建了但没有初始化的值和完全没有创建的值返回的结果都是一样的undefined,所以创建了一个值之后最好初始化,用来区分。
write() writeln() 应该在页面完全加载前调用, 在之后加载内容会清空,它会自动触发document.open()
replace() 定位时会移除掉页面包含的脚本,所以用它定位就没办法前进后退
location.replace("http://www.example.com/");
location 对象同时是window 和 document 的对象 因此:
window.location === document.location 完全可以调换