﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-panther-随笔分类-Web相关</title><link>http://www.cppblog.com/panther/category/12032.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 16 Jul 2010 15:41:50 GMT</lastBuildDate><pubDate>Fri, 16 Jul 2010 15:41:50 GMT</pubDate><ttl>60</ttl><item><title>JavaScript 知多少</title><link>http://www.cppblog.com/panther/archive/2009/10/11/98313.html</link><dc:creator>RUI</dc:creator><author>RUI</author><pubDate>Sun, 11 Oct 2009 08:02:00 GMT</pubDate><guid>http://www.cppblog.com/panther/archive/2009/10/11/98313.html</guid><wfw:comment>http://www.cppblog.com/panther/comments/98313.html</wfw:comment><comments>http://www.cppblog.com/panther/archive/2009/10/11/98313.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panther/comments/commentRss/98313.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panther/services/trackbacks/98313.html</trackback:ping><description><![CDATA[基本数据类型:<br>1. undefined 2.number 3.boolean 4.string 5.function 6.object, 其中function, object 为引用类型<br>检测一个变量是否存在 typeof(aVar) == 'undefined'<br><br>javascript 中字符串为Unicode字符序列, 反斜杠'\'当位于一行的末尾时,用于表示连续字符串声明. '\0'并不代表字符串的结束,如 var a = 'abc\0d'; 表示为'abc d', 空字符串 '' 也可以作为对象成员 如: var obj = {'':100};<br><br>函数直接量:<br>在SpiderMokey Javascript中,表达式中的具名函数只识别为匿名函数,而忽略函数名,而JS中则不同.如下：<br>(<br>function foo()<br>{alert(1);}<br>);<br>alert(foo); //在IE中可执行，但在FireFox下有语法错误 foo 为定义。<br><br>函数的定义:<br>function f(){alert(1);};<br>var f = function(){alert(1);}<br>var f = Function('alert(1);');<br>
var f = new Function('alert(1);');<br><br>匿名函数的调用方式：//没有引用的匿名函数的调用
<br>1. (function(){alert(1);}()); //最外层（）为强制运算符，其内部为函数调用，返回函数执行结果<br>2. (function(){alert(1);})();
//前面的（）为强制运算符，返回匿名函数， 而后函数被调用<br>3. void function(){alert(1);}(); //一定要有 void，其使其后的函数表达式执行运算<br>强制运算符 （） 与 void 确保以上脚本通过引擎的语法检测，负责 函数调用的那对() 是非法的, '();'单独存在没有意义。 同时他们也使得函数声明变成&#8216;直接量的单值表达式&#8217;而被执行。<br>
<br>正则表达式:<br>var reg = /ab\nc/gi 等价于 var reg = new RegExp('ab\\nc','gi');<br><br>运算符:<br>typeof 取变量的类型（6种之一）<br>void 使被修饰的表达式返回undefined; void (1+2) 返回undefined<br>new 创建对象， new Object 等价于 new Object(), 因为Object的contructor无arguments<br>function B()<br>{<br><br>}<br>fuction A()<br>{<br>return new B();<br>}<br>var b = new A //new A(); 返回B的实例<br><br>function getClass()<br>{return A;}<br>var b = new (getClass());<br><br>in 枚举对象属性; 属性检测<br>instanceof 检查变量是否为指定类的实例<br>delete 删除实例的属性,若成功则返回true, 但不能删除1.用var声明的变量 2.直接继承自原型的成员<br>&amp;&amp; || 具有短路效应，且返回值不一定为boolean, 如： 'abc' || 32 返回 'abc'; 'abc' &amp;&amp; 32 返回 32<br>javascript没有goto语句，但有带标号语句的break 和continue (抄袭java的)<br><br>javascript中的异常捕获:<br>try<br>{<br>}<br>catch(e)<br>{<br>}<br>finally<br>{<br>}<br><br>javascript中的with 语句://指定当前环境的默认对象，否则为window
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;A()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;<br>}<br>;<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;a&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;A();<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;ii&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;<br></span><span style="color: #0000ff;">with</span><span style="color: #000000;">(a)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(ii);</span><span style="color: #008000;">//</span><span style="color: #008000;">10</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br></span></div>
<br>关于javascript中的 ';'<br>换行符和文本结束符的前面可以没有分号，即:<br>var a = 1<br>alert (a) 合法<br>但 var a = 1 alert(a) // 语法错误<br>注意javascript中的变量只能达到函数级别 所以下列语句合法<br>for(var i = 0; i &lt; 1; ++i);<br>alert(i);<br><br>Javascript 中的对象:<br>1. 利用构造函数创建对象 function a(){}; var b = new a;<br>2. 对象直接量声明 var obj = {name:'hi','1':'1','abc.def':'aaa',,,,} //其中属性名可以是合法的标示符 或者 字符串，数字<br>&nbsp;&nbsp;&nbsp; 访问方式 obj.标识符，obj.字符串值(合法标示符)，obj['标识符']， obj[数字]，obj['数字'] ，obj[字符串]<br>3. 对象成员的可枚举性 for（var prop in obj） 是否能够枚举: 可以调用 propertyIsEnumerable 进行测试, 但原型继承链中的属性 会返回false,但却能被 for(var prop in obj) 枚举<br>如:<br>&nbsp; var obj = new Object(); obj.name='name'; obj.propertyIsEnumerable('name') //true ; obj.propertyIsEnumerable('no')//false<br>&nbsp;obj.propertyIsEnumerable('toString') //false 内置成员不可枚举<br><br>a[[1][1]] == a[undefined] ==&gt; arr = [1], a[arr[1]] = a[undefined]<br><br>javascript 引擎之WScript<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">/*</span><span style="color: #008000;">fileanme:&nbsp;argus_ws.js</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;alert(str){WScript.echo(str);}<br><br>alert(WScript.Arguments.Length);<br>alert(WScript.Arguments(</span><span style="color: #000000;">0</span><span style="color: #000000;">));</span></div>
<br>javascript中的变量声明和定义:<br>a.当引擎发现 var 声明的变量时,在其作用域中声明它,并设置为undefined, 此时并没有初始化动作<br>b.当引擎发现 某个非var变量被赋值,则解析它为全局变量<br>alert(a); //此时打印的值为 'undefined'<br>var a = 1;<br>但若没有 var a; 则alert(a) 具有语法错误<br><br>javascript 中继承: 对象系统的集成特性有三种实现方式,1.基于类(class-based) 2.基于原型(prototype-based) 3.基于元类(metaclass-based), 在javascript引擎的基本实现中，对象(Object Instance)并没有原型，而是构造器(constructor)有原型，所以实例不能引用到其类的原型, 即instance.prototype 为定义，而且原型本身也是对象实例。其中关键字null是代表一个空对象的对象 但却不是Object实例，null instanceof Object == false; javascript中对象的构造过程可以被简单的映射为&#8220;复制&#8221;，当然包括从原型的复制，而且是写时复制。<br><br>prototype实例的由来:<br>var __proto__ = null;<br>function get_prototype(){<br>if (!__proto__){<br>__proto__ = new Object(); // 当prototype被获取时，被初始化为一个Object类的实例<br>__proto__.constructor = this;//将其constructor属性设置为当前的function<br>}<br>return __proto__;<br>}<br><br>javascript原型系统预定义属性与方法:<br>对象原型所具有的基本性质<br>
<table title="对象原型所具有的基本性质" border="1" width="419">
    <tbody>
        <tr>
            <td>成员名<br></td>
            <td id="" class="" align="left" valign="middle">类型</td>
        </tr>
        <tr>
            <td>toString<br></td>
            <td>function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">toLocaleString<br></td>
            <td style="vertical-align: top;">function
            <br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">valueOf<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">constructor<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">propertyIsEnumerable<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">hasOwnProperty<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">isPrototypeof<br></td>
            <td style="vertical-align: top;">fucntion<br></td>
        </tr>
    </tbody>
</table>
<br>构造器Object()具有的特殊成员<br>
<table border="1" width="419">
    <tbody>
        <tr>
            <td>成员名<br></td>
            <td>类型<br></td>
        </tr>
        <tr>
            <td>call<br></td>
            <td>function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">apply<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">caller<br></td>
            <td style="vertical-align: top;">function<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">arguments<br></td>
            <td style="vertical-align: top;">object<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">length<br></td>
            <td style="vertical-align: top;">number<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">prototype<br></td>
            <td style="vertical-align: top;">object<br></td>
        </tr>
    </tbody>
</table>
javascript 实例对象可以通过 .constructor 找到其构造器<br>function f(){}; var a = new f(); a.constructor == f, 但是原型继承是有弊端的，例如<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;Base(){}<br></span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;Derive(){}<br>Derive.prototype&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Base();</span><span style="color: #008000;">//</span><span style="color: #008000;">这里原来的prototype的constructor被覆盖</span><span style="color: #008000;"><br>//</span><span style="color: #008000;">Derive.prototype.constructor&nbsp;=&nbsp;Derive&nbsp;;解决方案之一</span><span style="color: #008000;">;但这仍有问题，因为切断了原型链的性质<br>/*<br>解决方案二:但是效率欠佳<br>function Derive()<br>{<br>this.constructor = arguments.callee;<br>//this.constructor = Derive<br>}<br>*/<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;b&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Base()<br></span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Derive();<br><br><br>b.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;d.constructor&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;Base()<br></span><span style="color: #008000;">//</span><span style="color: #008000;">d.constructor沿着prototype链寻找constructor属性</span></div>
<br>javascript中的原型继承与类抄写:<br>function A(n){this.name=n;this.f=function(){alert(this.name);}}<br>function B(){A.call(this.'B');}<br>var b = new B(), b2 = new B();<br>b.f() // alert('B');<br>b instanceof A&nbsp; == false<br>b.f != b2.f<br>可见，类抄写是以空间换取了时间，但继承链的维护成员程序员的责任<br><br>javascript中的内置对象与原生对象：<br>内置对象与原生对象的区别在于，前者总是在引擎初始化阶段就被创建好的对象，是后者的一个子集，而后者还包括了一些在运行过程中动态创建的对象。如Arguments总是在引擎在函数调用时动态创建并添加在函数闭包中的。 javascript中的内置对象有11个：<br>
<table style="width: 852px; height: 286px;" border="1">
    <tbody>
        <tr>
            <td style="text-align: center;">对象<br></td>
            <td style="text-align: center;">特殊效果<br></td>
            <td style="vertical-align: top; text-align: center;">备注<br></td>
        </tr>
        <tr>
            <td style="text-align: left;">Number， Boolean， String<br></td>
            <td style="text-align: left;">值类型的包装类<br></td>
            <td style="vertical-align: top; text-align: left;">值类型与它的包装类之间的关系是在引擎内部设定好的，没有办法替代，继承类不行 注：<br>String.prototype.f=function(){return 'ok'}<br>alert('00'.f());<br>'00' instanceof String == false<br><br></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: left;">Array<br></td>
            <td style="vertical-align: top; text-align: left;">自动维护的length属性<br></td>
            <td style="vertical-align: top; text-align: left;">引擎隐式地维护，但继承类不行<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top; text-align: left;">Date<br></td>
            <td style="vertical-align: top; text-align: left;">日期对象的相关运算<br></td>
            <td style="vertical-align: top; text-align: left;">日期对象的方法仅能作用在有Date（）构造器产生的对象实例上，继承的不行<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">Function， RegExp<br></td>
            <td style="vertical-align: top;">可执行<br></td>
            <td style="vertical-align: top;">其可执行特性无法继承 <br>eg: function F(){} F.prototype=new Fucntion();<br>var myF = new F(); myF instanceof Function == true;<br>但是:<br>myF() // 非法，myF不可以执行<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">Error， Object<br></td>
            <td style="vertical-align: top;"><br></td>
            <td style="vertical-align: top;"><br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">Math<br></td>
            <td style="vertical-align: top;">是一个实例而非类<br></td>
            <td style="vertical-align: top;">在程序中直接引用<br></td>
        </tr>
        <tr>
            <td style="vertical-align: top;">Global<br></td>
            <td style="vertical-align: top;">程序中无法引用，引擎内使用<br></td>
            <td style="vertical-align: top;">Global== window，程序中的window<br></td>
        </tr>
    </tbody>
</table>
<br> <img src ="http://www.cppblog.com/panther/aggbug/98313.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panther/" target="_blank">RUI</a> 2009-10-11 16:02 <a href="http://www.cppblog.com/panther/archive/2009/10/11/98313.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML中的条件注释</title><link>http://www.cppblog.com/panther/archive/2009/10/09/98138.html</link><dc:creator>RUI</dc:creator><author>RUI</author><pubDate>Fri, 09 Oct 2009 04:01:00 GMT</pubDate><guid>http://www.cppblog.com/panther/archive/2009/10/09/98138.html</guid><wfw:comment>http://www.cppblog.com/panther/comments/98138.html</wfw:comment><comments>http://www.cppblog.com/panther/archive/2009/10/09/98138.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panther/comments/commentRss/98138.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panther/services/trackbacks/98138.html</trackback:ping><description><![CDATA[<br>
条件注释分为两种形式<br>
<br>
一、IE普通的条件注释，如：<br>
&lt;!&#8211;[if lte IE 6]&gt;[内容]&lt;![endif]&#8211;&gt;<br>
这种形式的条件注释在非IE浏览器解析成普通注释，包裹的内容非IE浏览器不执行。<br>
<br>
二、非标准注释的条件注释，如：<br>
&lt;![if gte IE 6]&gt;[内容]&lt;![endif]&gt;<br>
这种形式的条件注释包裹的内容却能被IE6+和火狐等现代浏览器执行，而IE也能对其执行条件判断。<br>
<br>但是这个却并非标准的HTML注释，不能通过W3C校验。<br>
<br>
[b]关于条件判断释义：[/b]<br>
if lte：低于或等于<br>
if：如果<br>
if !：如果不是<br>
if lt：如果低于<br>
if gte：高于或等于<br>
<br>条件注释是HTML注释的形式存在，所以只能写在HTML文档里面而不能写在CSS或者JavaScript里面！<img src ="http://www.cppblog.com/panther/aggbug/98138.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panther/" target="_blank">RUI</a> 2009-10-09 12:01 <a href="http://www.cppblog.com/panther/archive/2009/10/09/98138.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>