值为flase的有:
false 0 "" //空串 null undefined NaN
除了以上的之外的都是ture,包括"0" (zero in quotes), "false" (false in quotes) , empty functions, [](空数组), and {}(empty objects),都是为true
var a = !!(0); // false
var b = !!("0"); // true
为false的类型之间的比较:
false, 0 (zero), and "" (empty string)这三个都是"=="相等的
var c = (false == 0); // true var d = (false == ""); // true var e = (0 == ""); // true
null 和 undefined 除了他们自己本身相比较是"=="相等的,与其他的值相比较是不相等的
var f = (null == false); // false var g = (null == null); // true var h = (undefined == undefined); // true var i = (undefined == null); // true
还有一个比较特殊的NaN,他和任何一个值都不相等
var j = (NaN == null); // false var k = (NaN == NaN); // false
typeof(NaN)返回的“number”,一般我们通过isNaN()来判断一个值是不是NaN
上面的情况,如果使用“===”严格全等和“!==”严格不等,情况又不太一样了,这两个比较的是包括了类型和值
var l = (false == 0); // true var m = (false === 0); // false
附上两适用的方法:
1.检查是否位空数组
var n = ([].length == 0) // ture
2.检查是否位空对象
var obj = {};
for (var i in obj){
if(obj[i]) {
return true;
} else {
return false;
}
}
jsPerf提供了一个简单的方法来创建和分享的测试用例,比较不同JavaScript代码片断在不同浏览器的性能,输出对比结果。
实例截图:
jquery 中 show vs class
测试代码:
<div id="test" class="active"></div>
<div id="test2" style="display:block;"></div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script>
Benchmark.prototype.teardown = function() {
$('#test').addClass('active');
$('#test2').show();
};
</script>
浏览器下性能对比:

1. 结构尽量简单,最好使用table布局
可以保证在CSS样式失效、或者html被禁用的情况下最大程度的还原布局和样式。
2. 不要使用<head>标签
一般会被过滤掉。
3. 不要使用JavaScript和Flash
正常情况下这个是绝对被过滤的。。
4. 使用内联CSS样式,不要引入外部CSS文件,不要使用<style>标签
Gmail等不支持style标签。
5. CSS禁忌:不要使用绝对定位,不要使用背景图片,不要使用半透明,不要使用IE滤镜和CSS表达式,不要使用CSS3属性……
6. 图片要添加alt属性,保证在禁用图片的情况下传递有效信息
7. 图片添加宽高属性
8. 不要试图使用iframe引入外部页面
9. 尽量精简代码,减少图片数量和体积
10. 一般使用UTF-8编码
邮件客户端/服务商对CSS支持情况:





原文地址:http://www.oncoding.cn/2010/email-coding/
其他文章推荐:http://www.docin.com/p-32193901.html
直接上代码啦:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Untitled</title>
</head>
<body>
<script type="text/javascript">
function foo() {
alert("document.body.parentNode.previousSibling.tagName\n" + document.body.parentNode.previousSibling.tagName);
alert("document.body.parentNode.parentNode.firstChild.tagName\n" + document.body.parentNode.parentNode.firstChild.tagName);
alert("document.body.parentNode.parentNode.firstChild.nodeName\n" + document.body.parentNode.parentNode.firstChild.nodeName);
alert("document.body.parentNode.parentNode.firstChild.nodeValue\n" + document.body.parentNode.parentNode.firstChild.nodeValue);
alert("document.body.parentNode.parentNode.lastChild.tagName\n" + document.body.parentNode.parentNode.lastChild.tagName);
alert("document.body.parentNode.parentNode.lastChild.nodeName\n" + document.body.parentNode.parentNode.lastChild.nodeName);
}
function redoctypeme(which) {
alert("before\n" + document.body.parentNode.parentNode.firstChild.nodeValue);
if(which == 1) {
document.body.parentNode.parentNode.firstChild.nodeValue = "DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\"";
}
else {
document.body.parentNode.parentNode.firstChild.nodeValue = "DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"";
}
alert("after\n" + document.body.parentNode.parentNode.firstChild.nodeValue);
foobar = document.body.innerHTML;
alert("empty");
document.body.innerHTML = "";
alert("reset");
document.body.innerHTML = foobar;
}
</script>
<a href="javascript: foo()">stuff</a>
<a href="javascript: redoctypeme('1')">doctype 1</a>
<a href="javascript: redoctypeme('2')">doctype 2</a>
<hr>
<div style="background: #0c0; width: 200px; color: #fff;">200px</div>
<div style="background: #c00; width: 200px; padding: 20px; border: 30px solid #00c;"> </div>
<div style="background: #0c0; width: 300px; color: #fff;">300px</div>
</body>
</html>
