<script>
function addListener(target, type, handler) {
if (target.addEventListener) {
target.addEventListener(type, handler, false);
} else if (target.attachEvent) {
target.attachEvent("on"+type, handler);
} else {
target["on" + type] = handler;
}
}
function doSomething() {
// 代码
}
var btn = document.getElementById("action-btn");
addListener(btn, "click", doSomething);
</script>二、字面量对象的使用
var json = { username:"feng", age:22 };
修改属性:json.age = 22;
添加属性:json.address = "北京";
删除属性:delete json.age;
删除对象:json = null;
三、使用 console 来记录代码执行时间
console.time('aa')
var str = 's'
for(var i=0;i<1000;i++){
for(var j=0;j<1000;j++){
str +='b'
}
}
console.timeEnd('aa')四、合理利用二进制
如:对2取模,则偶数最低位是0,奇数最低位是1,与1进行位与操作的结果是0,奇数的最低位是1,与1进行位与操作的结果是1。
代码如下:
.odd{color:red}
.even{color:yellow}
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
var i = 0;
var lis = document.getElementsByTagName("li");
var len = lis.length;
for(;i<len;i++){
if(i&1){
lis[i].className = "even";//奇数
} else{
lis[i].className = "odd";//偶数
}
};if(color) {
if(color ==='black') {
printBlackBackground();
}elseif(color ==='red') {
printRedBackground();
}elseif(color ==='blue') {
printBlueBackground();
}elseif(color ==='green') {
printGreenBackground();
}else{
printYellowBackground();
}
}var colorObj = {
'black': printBlackBackground,
'red': printRedBackground,
'blue': printBlueBackground,
'green': printGreenBackground,
'yellow': printYellowBackground
};
if(color && colorObj.hasOwnProperty(color)) {
colorObj[color]();
}function printUpperCase(words){
var elements = [].concat(words);//字符串转换成数组,数组使用此方法则不发生改变
for(vari =0; i < elements.length; i++) {
console.log(elements[i].toUpperCase());
}
}
printUpperCase("cactus");// => CACTUS
printUpperCase(["cactus","bear","potato"]);// => CACTUS,BEAR,POTOCOvar myObject = {
name:'feng'
};
myObject.hasOwnProperty('name');// true
'name' in myObject;// true
myObject.hasOwnProperty('valueOf');// false, valueOf is inherited from the prototype chain
'valueOf' in myObject;// truevar myFunc =function(){
this.name = 'feng';
};
myFunc.prototype.age ='24';
var user =new myFunc();
user.hasOwnProperty('name');// true
user.hasOwnProperty('age');// false, because age is from the prototype chainvar elements = document.getElementsByTagName('input');
var n = elements.length;
for (var i = 0; i < n; i++) {
elements[i].onclick = function() {
console.log("This is element #" + i);
};
}运行以上代码,如果页面上有10个按钮的话,点击每一个按钮都会弹出 “This is element #10”! 。这和我们原先预期的并不一样。这是因为当点击事件被触发的时候,for循环早已执行完毕,i的值也已经从0变成了。
var elems = document.getElementsByTagName('a');
for (var i = 0; i < elems.length; i++) {
(function (lockedInIndex) {
elems[i].addEventListener('click', function (e) {
e.preventDefault();
alert('I am link #' + lockedInIndex);
}, 'false');
})(i);
}var a = [0, 1, 2]; // 是 object 同时排除 null、排除纯对象
console.log(typeof a === 'object' && a !== null && Object.prototype.toString.call(a) !== '[object Object]'); // true<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
var cookie = {
setCookie:function(name,value,iDay){
var cookieStr = '';
if(iDay == undefined){
cookieStr += name+'='+value+';';
}else{
var oDate = new Date();
oDate.setDate(oDate.getDate()+iDay);
cookieStr += name+'='+value+';express='+oDate;
}
document.cookie = cookieStr;
},
getCookie:function(name){
var arr = document.cookie.split(';');
for(var i=0;i<arr.length;i++){
var arr2 = arr[i].split('=');
if(arr2[0] == name){
return arr2[1];
}
}
return '';
},
removeCookie:function(name){
this.setCookie(name,'1',-1);
}
}
function ControlAlert(){
var flag = cookie.getCookie('flag');
if(!flag){
alert("我是第一次加载的哟!");
cookie.setCookie('flag',true);
//cookie.setCookie('flag',true,1);//如果有第三个参数则保存cookie的天数,如果不设置,浏览器关闭时cookie过期
}
}
(function(){
ControlAlert();
}());
</script>
</body>
</html>
<pre name="code" class="javascript">// 单个 ~<pre name="code" class="javascript">console.log(~1337) // -1338
// 数字输入
console.log(~~47.11) // -> 47
console.log(~~-12.88) // -> -12
console.log(~~1.9999) // -> 1
console.log(~~3) // -> 3
// 转换失败
console.log(~~[]) // -> 0
console.log(~~NaN) // -> 0
console.log(~~null) // -> 0
// 大于32位整数时转换失败
console.log(~~(2147483647 + 1) === (2147483647 + 1)) // -> 0
十二、方法的链式调用:方法内返回对象
function Person(name) {
this.name = name;
this.sayName = function() {
console.log("Hello my name is: ", this.name);
return this;
};
this.changeName = function(name) {
this.name = name;
return this;
};
}
var person = new Person("John");
person.sayName().changeName("Timmy").sayName();十三、.短路求值
&& )的第一个运算数的值为false时,其结果必定为false;当OR( || )的第一个运算数为true时,最后结果必定为true。逻辑或可以用来给参数设置默认值。function theSameOldFoo(name){
name = name || 'Bar' ;
console.log("My best friend's name is " + name);
}
theSameOldFoo(); // My best friend'name is Bar
theSameOldFoo('Bhaskar'); // My best friend's name is Bhaskar var dog = {
bark: function(){
console.log('Woof Woof');
<span style="white-space:pre"> </span>}
};
// 调用 dog.bark();
dog.bark(); // Woof Woof.
// 但是当dog未定义时,dog.bark() 将会抛出"Cannot read property 'bark' of undefined." 错误
// 防止这种情况,我们可以使用 &&.
dog&&dog.bark(); // This will only call dog.bark(), if dog is defined.十四、!! 的使用,只输出false和true
!!"" // false
!!0 // false
!!null // false
!!undefined // false
!!NaN // false
!!"hello" // true
!!1 // true
!!{} // true
!![] // true
327




被折叠的 条评论
为什么被折叠?



