javascript检验汉字

javascript检验汉字
//检验汉字
function chkstrlen(str)
  {
    var strlen = 0;
    for(var i = 0;i < str.length; i++)
    {
      if(str.charCodeAt(i) > 255) //如果是汉字,则字符串长度加2
        strlen += 2;
      else
        strlen++;
    }
    return   strlen;
  } 

文本框运行html/js

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>文本框运行html/js代码</title>
<script>
window.onload=function(){
var oTxt=document.getElementById(“txt1″);
var oBtn=document.getElementById(“btn1″);

oBtn.onclick=function(){
document.write(“aa”);
var oNewWin=window.open(“about:blank”);
oNewWin.document.write(oTxt.value);
}
}
</script>
</head>
<body>
</body>
<textarea id=”txt1″ rows=”10″ cols=”40″></textarea><br/>
<input id=”btn1″ type=”button” value=”运行” >
</html>

IE浏览器存在的setAttribute bug

IE的setAttribute中与标准浏览器的有许多不同,主要表现在IE对setAttribute的功能上有些限制,就是不能用setAttribute来设定class、style于onclick等事件的值以及设置name属性,那这样就会导致setAttribute在IE浏览器里失去很多的用途!而在IE6,IE7中,如果动态生成input元素,是无法为其设置name属性的。不过当然这bug已经在最新版的IE8中被修复,详情可以浏览微软官网给出的资料。由于name属性对表单元素非常重要(在提交表单时,与value属性组成键值对,发送到后台),因此必须留意这个bug。
 
微软的相关资料:NAME Attribute | name Property
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug  By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var form = document.createElement("form");
        var input = document.createElement("input");
        var root = document.body;
        input.setAttribute("name", "test");
        root.appendChild(form);//注意添加顺序,添加顺序错的话,IE会内存泄漏
        form.appendChild(input);      
        alert(form.elements.test)   
      }
    </script>
 
  </head>
  <body>
    <h3>请在IE6与IE7下浏览,当然IE8也可以,我已让IE8处在IE7的兼容模式下运作。兼容模式连bugs也兼容了……</h3>
  </body>
</html>
 
解决办法有两个,如用innerHTML,觉得innerHTML真是一个伟大的发明,连火狐与W3C那帮死对头也不得不屈服。
 
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var body = document.body;
        var form = document.createElement("form");
        form.innerHTML = "<input name="test" type="text" />"
        body.appendChild(form);
        alert(form.elements.test)
      }
    </script>
 
  </head>
  <body>
    <h3>请在IE6与IE7下浏览</h3>
  </body>
</html>
 
另一个利用IE强大的createElement特征,它能在创建元素的同时,连属性也一起创建。
 
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var body = document.body;
        var form = document.createElement("form");
        try{
          var input = document.createElement("<input type="text" name="test">");
        }catch(e){
          var input = document.createElement("input");
          input.setAttribute("name", "test")
        }
        body.appendChild(form);//注意添加顺序,添加顺序错的话,IE会内存泄漏
        form.appendChild(input);
        alert(form.elements.test)
      }
    </script>
 
  </head>
  <body>
    <h3>请在IE6与IE7下浏览</h3>
  </body>
</html>
 
但name只是冰山一角,setAttribute在设置属性时,有许多属性在IE下与标准浏览器的命名是不一样的,看一下jQuery,发现它也是不全的。许多地雷埋在这里,总有一个你迟早会中的。下面是一个详尽的参照表:左边为标准游览器的,右边是IE的。
 
var IEfix = {
 acceptcharset: "acceptCharset",
 accesskey: "accessKey",
 allowtransparency: "allowTransparency",
 bgcolor: "bgColor",
 cellpadding: "cellPadding",
 cellspacing: "cellSpacing",
 "class":  "className",
 colspan:  "colSpan",
 checked: "defaultChecked",
 selected: "defaultSelected",
 "for":  "htmlFor" ,
 frameborder:  "frameBorder",
 hspace:  "hSpace",
 longdesc:  "longDesc", 
 maxlength:  "maxLength",
 marginwidth:  "marginWidth", 
 marginheight:  "marginHeight",
 noresize:  "noResize",
 noshade:  "noShade",
 readonly: "readOnly",
 rowspan:  "rowSpan",
 tabindex:  "tabIndex",
 valign:  "vAlign",
 vspace:  "vSpace"
}
IE不能用setAttribute为dom元素设置onXXX属性,换言之,不能用setAttribute设置事件。
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var body = document.body;
        var form = document.createElement("form");
        form.innerHTML = "<input name="test" type="text" />"
        body.appendChild(form);
        form.elements.test.setAttribute("onfocus", "alert(this.name)");
      }
    </script>
  </head>
  <body>
    <h3>用setAttribute设置事件</h3>
    <p>在IE下文本域获得焦点后并没有弹出预期的alert!</p>
  </body>
</html>
IE要直接赋给一个函数!
var body = document.body;
 
var form = document.createElement("form");
form.innerHTML = "<input name="test" type="text" />"
body.appendChild(form);
if(!+"v1"){
  form.elements.test.setAttribute("onfocus", function(){alert(this.name)});
}else{
  form.elements.test.setAttribute("onfocus", "alert(this.name)");
}
  
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var body = document.body;
        var form = document.createElement("form");
        form.innerHTML = "<input name="test" type="text" />"
        body.appendChild(form);
        if(!+"v1"){
          form.elements.test.setAttribute("onfocus", function(){alert(this.name)});
        }else{
          form.elements.test.setAttribute("onfocus", "alert(this.name)");
        }       
      }
    </script>
  </head>
  <body>
    <h3>IE用setAttribute设置事件要直接赋函数!</h3>
  </body>
</html>
在IE6与IE7中也不能用setAttribute设置样式:dom.setAttribute("style","font-size:14px")
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
       var styleData = "border:1px solid #000;background:#F1FAFA;font-weight:bold;";
        var h3 = document.getElementsByTagName("h3")[0]
     
        h3.setAttribute("style", styleData);
      }
    </script>
  </head>
  <body>
    <h3>IE6与IE7看不到效果!</h3>
  </body>
</html>
这时要统一用dom元素的style.csstext属性赋值比较安全。
  
  
<!doctype html>
<html dir="ltr" lang="zh-CN">
  <head>
    <meta charset="utf-8"/>
    <title>setAttribute bug By 司徒正美</title>
    <meta http-equiv="X-UA-Compatible" content="IE=7">
    <script type="text/javascript">
      window.onload = function(){
        var styleData = "border:1px solid #000;background:#F1FAFA;font-weight:bold;";
        var h3 = document.getElementsByTagName("h3")[0]
        if(!+"v1"){
          //use the .cssText hack
          h3.style.setAttribute("cssText", styleData);
        } else {
          //use the correct DOM Method
          h3.setAttribute("style", styleData);
        }
      }
    </script>
  </head>
  <body>
    <h3>h3.style.setAttribute("cssText", styleData);</h3>
  </body>
</html>
  
总结:各个浏览器的标准的不统一确实给我们在网站制作的过程中带来很多的麻烦,遇到这种问题也是我们特别头痛的事情,这时我们试着换一种思路来考虑问题,可能也会得到异曲同工之妙。最后,我个人感觉这个问题也并不能说是IE浏览器的问题,只能说w3c在制定标准的时候欠缺全面的考虑!逼近很多标签是IE浏览器制定的。
 

js获取和设置html任意属性的值

在实际的应用中,可能要用html标签的属性去保存一些信息,这就汲及对标签任意属性的设置值和读取值。
 
getAttribute:取得属性,setAttribute:设置属性。
 
比如
 
<li id="mynote" note="真的很折腾">zhetenga</li>
 
var mynote = document.getElementById("mynote");
 
alert(mynote.getAttribute("note"));
 
mynote.setAttribute("note", "真的折腾啊")
 
alert(mynote.getAttribute("note")); 

简单常用JS函数集合大全107个

 1.document.write(""); 输出语句
2.JS中的注释为//
3.传统的HTML文档顺序是:document->html->(head,body)
4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)
5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)
6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();
7.JS中的值类型:String,Number,Boolean,Null,Object,Function
8.JS中的字符型转换成数值型:parseInt(),parseFloat()
9.JS中的数字转换成字符型:(""+变量)
10.JS中的取字符串长度是:(length)
11.JS中的字符与字符相连接使用+号.
12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=
13.JS中声明变量使用:var来进行声明
14.JS中的判断语句结构:if(condition){}else{}
15.JS中的循环结构:for([initial e&shy;xPRession];[condition];[upadte e&shy;xpression]) {inside loop}
16.循环中止的命令是:break
17.JS中的函数定义:function functionName([parameter],...){statement[s]}
18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.
19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self
20.状态栏的设置:window.status="字符";
21.弹出提示信息:window.alert("字符");
22.弹出确认框:window.confirm();
23.弹出输入提示框:window.prompt();
24.指定当前显示链接的位置:window.location.href="URL"
25.取出窗体中的所有表单的数量:document.forms.length
26.关闭文档的输出流:document.close();
27.字符串追加连接符:+=
28.创建一个文档元素:document.createElement(),document.createTextNode()
29.得到元素的方法:document.getElementById()
30.设置表单中所有文本型的成员的值为空:
var form = window.document.forms[0]
for (var i = 0; i<form.elements.length;i++){
if (form.elements[i].type == "text"){
form.elements[i].value = "";
}
}
31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)
32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length
33.单选按钮组判断是否被选中也是用checked.
34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)
35.字符串的定义:var myString = new String("This is lightsWord");
36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.
38.取字符串中指定位置的一个字符:StringA.charAt(9);
39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数
41.定义日期型变量:var today = new Date();
42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计]
43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName
44.parent代表父亲对象,top代表最顶端对象
45.打开子窗口的父窗口为:opener
46.表示当前所属的位置:this
47.当在超链接中调用JS函数时用:(javascript:)来开头后面加函数名
48.在老的浏览器中不执行此JS:<!-- //-->
49.引用一个文件式的JS:<script type="text/Javascript" src="aaa.js"></script>
50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript>
51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href="a.html" onclick="location.href="b.html";return false">dfsadf</a>
52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError
53.JS中的换行:
 
54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script>
55.JS中的all代表其下层的全部元素http://bizhi.knowsky.com/
56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1
57.innerHTML的值是表单元素的值:如<p id="para">"how are <em>you</em>"</p>,则innerHTML的值就是:how are <em>you</em>
58.innerTEXT的值和上面的一样,只不过不会把<em>这种标记显示出来.
59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.
60.isDisabled判断是否为禁止状态.disabled设置禁止状态
61.length取得长度,返回整型数值
62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc
63.window.focus()使当前的窗口在所有窗口之前.
64.blur()指失去焦点.与FOCUS()相反.
65.select()指元素为选中状态.
66.防止用户对文本框中输入文本:onfocus="this.blur()"
67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length
68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()
69.状态栏文字的设置:window.status="文字",默认的状态栏文字设置:window.defaultStatus = "文字.";
70.添加到收藏夹:external.AddFavorite("http://www.xrss.cn","jaskdlf");
71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;
72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.
73.JS中的self指的是当前的窗口
74.JS中状态栏显示内容:window.status="内容"
75.JS中的top指的是框架集中最顶层的框架
76.JS中关闭当前的窗口:window.close();
77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}
78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");
79.JS中的打印:window.print()
80.JS中的提示输入框:window.prompt("message","defaultReply");
81.JS中的窗口滚动条:window.scroll(x,y)
82.JS中的窗口滚动到位置:window.scrollby
83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose;
86.当窗体第一次调用时使用的文件句柄:onload()
87.当窗体关闭时调用的文件句柄:onunload()
88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),href(全部的信息)
89.window.location.reload()刷新当前页面.
89-1.parent.location.reload()刷新父亲对象(用于框架)
89-2.opener.location.reload()刷新父窗口对象(用于单开窗口)
89-3.top.location.reload()刷新最顶端对象(用于多开窗口)
90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)
91.document.write()不换行的输出,document.writeln()换行输出
92.document.body.noWrap=true;防止链接文字折行.
93.变量名.charAt(第几位),取该变量的第几位的字符.
94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.
95.字符串连接:string.concat(string2),或用+=进行连接
96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)
97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.
98.string.match(regExpression),判断字符是否匹配.
99.string.replace(regExpression,replaceString)替换现有字符串.
100.string.split(分隔符)返回一个数组存储值.
101.string.substr(start[,length])取从第几位到指定长度的字符串.
102.string.toLowerCase()使字符串全部变为小写.
103.string.toUpperCase()使全部字符变为大写.
104.parseInt(string[,radix(代表进制)])强制转换成整型.
105.parseFloat(string[,radix])强制转换成浮点型.
106.isNaN(变量):测试是否为数值型.
107.定义常量的关键字:const,定义变量的关键字:var

JS类型转换

var a=1+"a"; //数字 字符 =字符
var b=false+"a"; //布尔+字符=字符
var c=true+1; //布尔+数字=数字
alert(typeof(a));
alert(typeof(b));
alert(typeof(c)); 

javascript学习笔记__基础__大小写 and 思路

这些是我在网上看到的很简单的例子但是里面都是经验 就是作者写的时候大小写没有分给我带来了排错学习的机会一定要记得 js对大小写的严谨,还有就是解决问题的思路,先解决问题然后在优化,在优化,在优化.
此时想起了上大学利用 VB 写的一个用时间加密的小程序,用它得了95分顺利通过考试哈哈….高兴的是别人写了N行别的程序而我写了不到30行.

//方法四 我的追求
var str = "今天是星期" + "日一二三四五六".charAt(new Date().getDay());
 
//方法一 这个是我从来都没有想到的非常简短写法利用数组键方式写的 思路决定出路!!
var a = new Array("日", "一", "二", "三", "四", "五", "六");
var week = new Date().getDay();
alert(week);
var str = "今天是星期"+ a[week];
alert(str);
 
// 方法二 繁琐 但也可以解决问题
    var str = "";
    var week = new Date().getDay();
    if (week == 0) {
            str = "今天是星期日";
    } else if (week == 1) {
            str = "今天是星期一";
    } else if (week == 2) {
            str = "今天是星期二";
    } else if (week == 3) {
            str = "今天是星期三";
    } else if (week == 4) {
            str = "今天是星期四";
    } else if (week == 5) {
            str = "今天是星期五";
    } else if (week == 6) {
            str = "今天是星期六";
    }
// 方法三 可以解决问题或者更好一些
    var str1 = "今天是星期";
    var week = new Date().getDay();
    switch (week) {
            case 0 :
                    str1 += "日";
                    break;
            case 1 :
                    str1 += "一";
                    break;
            case 2 :
                    str1 += "二";
                    break;
            case 3 :
                    str1 += "三";
                    break;
            case 4 :
                    str1 += "四";
                    break;
            case 5 :
                    str1 += "五";
                    break;
            case 6 :
                    str1 += "六";
                    break;
    }
    alert(str);
    alert(str1); 

javascript console

console.log(object[, object, ...])
在控制台输出一条消息。如果有多个参数,输出时会用空格隔开这些参数。
 
第一个参数可以是一个包含格式化占位符输出的字符串,例如:
console.log("The %s jumped over %d tall buildings", animal, count);
 
上面的例子可以用下面的无格式化占位符输出的代码替换:
console.log( " The " , animal,  " jumped over " , count,  " tall buildings " );
 
并且,这两种方式是可以组合使用的。如果使用了格式化占位符,而提供的参数的个数多于占位符的个数,那么,多余的参数会以空格分隔的方式附加在字符串后面,就像:
console.log( " I am %s and I have: " , myName, thing1, thing2, thing3);
 
如果参数是一个Javascript对象,那么在控制台输出的就不是静态文字,而是一个可交互的超链接,点击超链接可以查看该对象的HTML, CSS, Script, DOM窗口,可用格式化字符串%o代替Javascript对象。
console.log( " Body tag is %o " , document.body);
 
格式化字符串列表:
 
     
%s  字符串
%d, %i  整型(暂不支持数字型)
%f  浮点型 (暂不支持数字型) 
%o  链接对象
 
console.debug(object[, object, ...])
在控制台输出一条消息,包含一个指向代码调用位置的超链接。假如是直接在控制台输入该命令,就不会出现超链接(和console.log()一样)。
 
console.info(object[, object, ...])
在控制台输出一条带有“信息”图标的消息和一个指向代码调用位置的超链接。
 
console.warn(object[, object, ...])
在控制台输出一条带有“警告”图标的消息和一个指向代码调用位置的超链接。
 
console.error(object[, object, ...])
在控制台输出一条带有“错误”图标的消息和一个指向代码调用位置的超链接。
 
console.assert(expression[, object, ...])
测试表达式expression是否为真。如果不是真,会在控制台写一条消息并抛出异常
 
console.dir(object)
以列表形式输出一个对象的所有属性,有点和你查看DOM窗口相类似。
 
console.dirxml(node)
输出一个HTML或者XML元素的XML源代码。和你在HTML窗口看到的相似。
 
console.trace()
Prints an interactive stack trace of JavaScript execution at the point where it is called.
 
The stack trace details the functions on the stack, as well as the values that were passed as arguments to each function. You can click each function to take you to its source in the Script tab, and click each argument value to inspect it in the DOM or HTML tabs.
 
console.group(object[, object, ...])
输出一条消息,并打开一个嵌套块,块中的内容都会缩进。调用console.groupEnd()关闭块。该命令可以嵌套使用。
 
console.groupEnd()
关闭最近一个由console.group打开的块。
 
console.time(name)
创建一个名字为name的计时器,调用console.timeEnd(name)停止计时器并输出所耗时间(毫秒)。
 
console.timeEnd(name)
停止同名的计时器并输出所耗时间(毫秒)。
 
console.profile([title])
打开Javascript性能测试开关。可选参数title会在打印性能测试报告时在报告的开头输出。
 
console.profileEnd()
关闭Javascript性能测试开关并输出报告。
 
console.count([title])
 
Writes the number of times that the line of code where count was called was executed. The optional argument title will print a message in addition to the number of the count. 

js加减法

<html>
 <head>
  <meta http-equiv="content-type" content="text/html;charset="utf-8">
  <script>
  function getRandom(){//孤风傲雪逗自己玩
   var rnd=Math.random();
   var number=Math.floor(rnd * 10);
   return number;
   }
  var a = getRandom();
  var b = getRandom();
  var aaa=a;
  var bbb=b;
  var aa=String(a);
  var bb=String(b);
  if(getRandom()%2==0){
  var c = a + b;  
  var password=prompt(aa+"+"+bb+"="+"?","");
   if(password == c){
     
   alert("正确");
  }else{
   alert("错误");
   }
  }else{
   var c = a - b;  
  var password=prompt(aa+"-"+bb+"="+"?","");
   if(password == c){
     
   alert("正确");
  }else{
   alert("错误");
   }
    
    
    
    
  }
  </script>
   
   
   
 </head>
 <body>
   
 </body>
</html> 

[转] javascript中的eval函数动态执行

 
定义和用法

eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
语法

eval(string)
参数	 描述
string	 必需。要计算的字符串,其中含有要计算的 JavaScript 表达式或要执行的语句。
返回值

通过计算 string 得到的值(如果有的话)。
说明

该方法只接受原始字符串作为参数,如果 string 参数不是原始字符串,那么该方法将不作任何改变地返回。因此请不要为 eval() 函数传递 String 对象来作为参数。
如果试图覆盖 eval 属性或把 eval() 方法赋予另一个属性,并通过该属性调用它,则 ECMAScript 实现允许抛出一个 EvalError 异常。
抛出

如果参数中没有合法的表达式和语句,则抛出 SyntaxError 异常。
如果非法调用 eval(),则抛出 EvalError 异常。
如果传递给 eval() 的 Javascript 代码生成了一个异常,eval() 将把该异常传递给调用者。
提示和注释

提示:虽然 eval() 的功能非常强大,但在实际使用中用到它的情况并不多。
实例

例子 1

在本例中,我们将在几个字符串上运用 eval(),并看看返回的结果:
?
1
2
3
4
5
6
7
8
9
10
<script type="text/javascript">
 
eval("x=10;y=20;document.write(x*y)")
 
document.write(eval("2+2"))
 
var x=10
document.write(eval(x+17))
 
</script>



输出:
200
4
27
例子 2

看一下在其他情况中,eval() 返回的结果:
?
1
2
3
eval("2+3")// 返回 5
var myeval = eval;// 可能会抛出 EvalError 异常
myeval("2+3");// 可能会抛出 EvalError 异常

可以使用下面这段代码来检测 eval() 的参数是否合法:
?
1
2
3
4
5
6
7
try  {
     alert("Result:" + eval(prompt("Enter an expression:","")));
     }
 
catch(exception) {
     alert(exception);
     }


 
 
本文的两个目的:
(1)介绍javascript中的eval函数的用法
(2)如何在函数内执行全局代码 
►先来说eval的用法,内容比较简单,熟悉的可以跳过。
    eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。
    需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:
?
1
2
3
4
5
var code1=""a" + 2";    //表达式
var code2="{a:2}";      //语句
alert(eval(code1));     //->"a2"
alert(eval(code2));     //->undefined
alert(eval("(" + code2 + ")"));    //->[object Object] 例如JSON 对象就是利用这个
    可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回 其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括 号后输出的是语句表示的对象。
►现在来说本文的重点,如何在函数内执行全局代码。
   为了说明这个问题,先看一个例子:
var s="global";    //定义一个全局变量
function demo1(){
    eval("var s="local"");
}
demo1();
alert(s);    //->global
         很好理解,上面的demo1函数等价于:function demo1(){var s="local";},其中定义了一个局部变量s。
        所以最后的输出是global并不是什么奇怪的事情,毕竟大家都能很清楚的区分局部变量和全局变量。
        仔细体会一下,可以发现eval函数的特点,它总是在调用它的上下文变量空间(也称为:包,closure)内执行,无论是变量定义还是函数定义都是如此,所以如下的代码会产生函数未定义的错误:
var s="function test(){return 1;}";     //一个函数定义语句
function demo2(){
    eval(s);
}
demo2();
alert(test());    //->error:test is not defined
        这是因为test函数在局部空间定义,demo2函数内可以访问到,外面就访问不到了。
         而在实际的Ajax开发中,有时我们需要从服务器动态获取代码来执行,以减轻一次载入代码过多的问题,或者是一些代码是通过Javascript自身生成的,希望用eval函数来使其执行。
但这样的动态获取代码的工作一般在函数内完成,比如:
function loadCode(){
    var code=getCode();
    eval(code);
}
       可见eval不可能在全局空间内执行,这就给开发带来了不少问题,也看到过很多人为此郁闷。
        不过现在偶终于找到了解决办法,嘿嘿,可以同时兼容IE和Firefox,方法如下:
var X2={}    //my namespace:)
X2.Eval=function(code){
 if(!!(window.attachEvent && !window.opera)){
  //ie
  execScript(code); 
 }else{
  //not ie
  window.eval(code);
 }
}
        现在如果要想在函数内定义全局代码,就可以通过调用X2.Eval(code)方法,一个例子如下:
var s="global";
function demo3(){
 X2.Eval("var s="local"");
}
demo3();
alert(s); //->"local"
        可见,在demo3函数内重新定义了全局变量s="local"。
        需要注意的是X2.Eval并不返回值,如果要进行表达式的求值,还是用系统的eval函数。X2.Eval设计为仅做全局代码定义用。
        其实看到这里,或许有人感觉问题也太容易解决了点,呵呵,但发现这个办法倒是需要些运气和技巧的:
(1)对于IE浏览器,默认已经提供了这样的函数:execScript,用于在全局空间执行代码,只是知道的人还不多。
(2)对于Firefox浏览器,直接调用eval函数,则在调用者的空间执行;如果调用       window.eval则在全局空间执行。这个知道的人估计就更少了。毕竟alert(eval==window.eval)返回true!
         Firefox的eval函数的特点的确是很令人奇怪的,但从javascript规范中倒也能找到其来源:
If value of the eval property is used in any way other than a direct call (that is, other than by the explicit use of its
name as an Identifier which is the MemberExpression in a CallExpression), or if the eval property is assigned to,
an EvalError exception may be thrown.
      意思大概就是说eval函数的执行是和调用者相关的,但并没有说其执行上下文的问题。所以IE和Firefox孰是孰非也就很难说了,大家知道解决办法就好。