普通confirm对话框
var message = "确定要修改吗?";
if(confirm(message) == true){
//doSomeThing();
}
正则表达式
"^\\d+$ " //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$ " //正整数
"^((-\\d+)|(0+))$ " //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$ " //负整数
"^-?\\d+$ " //整数
"^\\d+(\\.\\d+)?$ " //非负浮点数(正浮点数 + 0)
"^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$ " //正浮点数
"^((-\\d+(\\.\\d+)?)|(0+(\\.0+)?))$ " //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ " //负浮点数
"^(-?\\d+)(\\.\\d+)?$ " //浮点数
例如:/^\\d+$/.test(“a*b”);
jQuery绑定点击事件并获取ID
$(function(){
$(“#abc”).click(function(){
alert($(this).attr('id'));//abc
});
}
jQuery.ajax,返回的字符串只能为success:function(){};不能为error:function(){};
相应struts配置也只能配置result=”success” type=”json”
JSP获取客户端IP
<%
response.getWriter().write(request.getRemoteAddr());
response.getWriter().flush();
%>
Img元素添加任意属性
<img id='setup_"+resBean.id+"' resID='"+resBean.id+"'/>
这点类似Flex,估计img是个类似Object的东西。
jQuery遍历select
$.each($(“#masterSelect option:selected”),function(i,rightOption){
//doSomeThing();
});
//根据复选框的选择/取消选择,显示/隐藏相应协议下的文本框
$("input[name='protocol']").click(function(obj){
var showVal = $(this).val();
if($(this).attr("checked") == true){
$("#param"+showVal).show();
}else{
$("#param"+showVal).hide();
}
});
其中”protocol”为一个checkboxlist的name;
Fieldset使用
<fieldset name="tel">
<legend>
TELNET协议参数设置
</legend>
<s:textfield id="TELNET" name="TELNET_ip" ></s:textfield>
端口:
<s:textfield id="TELNET" name="TELNET_port" ></s:textfield>
</fieldset>
里边元素横向排列
Struts2自定义标签实现
包括自定义标签类(extends ComponentTagSupport)―标签逻辑实现类(extends Component)―.tld配置文件三部分;
.tld配置文件需要配置到web.xml中,例如:
<jsp-config>
<taglib>
<taglib-uri>/myTag</taglib-uri>
<taglib-location>/WEB-INF/tlds/myTag.tld</taglib-location>
</taglib>
</jsp-config>
.tld中rtexprvalue表示该自定义标签的某属性的值是否可以直接指定或者通过动态计算指定,为false时表示该自定义标签的某属性的值只能直接指定;
a href标签,target="blank",target="_blank" 的区别
在编写html代码的时候。
target="blank" -- 在新的标签中打开,但是,往后打开的标签会覆盖整个标签;target="_blank" -- 永远都用新标签打开。
struts2标签
有两个cssClass和cssStyle两个属性,前者就是css可以定义类选择器和id选择器,后者可以定义行类选择器。
Javascript定时器与延迟执行
inId = window.setInterval("daoshu()", 1000);
window.clearInterval(inId);
setTimeout("s2b()",speed)
text.substring(x,x+1).toUpperCase()
parent.window.status= '某某欢迎使用本系统 '
jQuery防止JS库命名冲突,自定义简称
Window.XMLHttpRequest
在JS里,window是最顶级对象(除了Object,Function...那些之外),它代表了一个窗体。而window.XMLHttpRequest代表的是window的一个属性。这个是用来区分浏览器的,因为在firefox,opera,safiar,IE7.0,IE8.0(我所知道的window对象有这个属性的浏览器)这些浏览器中,window是有XMLHttpRequest这个属性的,而IE6.0,5.5都是没有的,IE6.0或5.5是没有这个属性的,使用window.ActiveXObject替代。当然前者和后者的XMLHttpRequest对象生成方式也是不一样的。
XMLHttpRequest可以提供不重新加载页面的情况下更新网页,在页面加载后在客户端向服务器请求数据,在页面加载后在服务器端接受数据,在后台向客户端发送数据。XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容。尽管名为 XMLHttpRequest,它并不限于和 XML 文档一起使用:它可以接收任何形式的文本文档。XMLHttpRequest 对象是名为 AJAX 的 Web 应用程序架构的一项关键功能。
客户端向服务器端传值的方式
提交的方式一种是post表单提交参数,一种是 get用地址栏提交参数,如果是ajax我觉得用什么方式提交都没关系;这要看你的ajax处理页怎么取值了 如果是从QueryString里取值就要用GET方式,如果从 Form里取值就要用POST。
弹出对话框功能
window.showModalDialog() 方法用来创建一个显示HTML内容的模式对话框;
vReturnValue = window.showModalDialog(sURL [, vArguments] [,sFeatures]);
sURL -- 必选参数,类型:字符串。用来指定对话框要显示的文档的URL。
vArguments -- 可选参数,类型:变体。用来向对话框传递参数。传递的参数类型不限,包括数组等。对话框通过window.dialogArguments来取得传递进来的参数。
sFeatures -- 可选参数,类型:字符串。用来描述对话框的外观等信息,可以使用以下的一个或几个,用分号“;”隔开。
jQuery遍历checkBox
var sceneids = new Array();
$("input[name='id']:checkbox:checked").each(function(){
var val = $(this).val();
if(val != null && val != ""){
sceneids.push(val);
}
});
点击全选的checkBox,下边checkBox跟着选中
$("#checkAll").click(function() {
var flag = $("#checkAll").attr("checked");
$("input[name='id']").each(function() {
if($(this).val() != null && $(this).val() != ""){
$(this).attr("checked", flag);
}
});
});
Javascript中用concat函数组合两个array数组
JavaScript数组函数
shift :删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
unshift :将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
注:在IE6.0下测试返回值总为 undefined,FF2.0下测试返回值为7,所以这个方法的返回值不可靠,需要用返回值时可用splice代替本方法来使用。
pop :删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5
push :将参数添加到原数组末尾,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
concat :返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
splice (start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length; //同unshift
var b = a.splice(a.length-1,1); //同pop
a.splice(a.length,0,6,7); var b = a.length; //同push ---------------------------------------------------
splice详解:
splice函数方法是从一个数组中移除一个或多个元素,如果必要,在所移除元素的位置上插入新元素,返回所移除的元素。
arrayObj.splice( start, deleteCount, [item1[, item2[, . . . [,itemN]]]])
其中arrayObj必选项。一个 Array 对象。
start是必选项。指定从数组中移除元素的开始位置,这个位置是从 0 开始计算的。
deleteCount是必选项。要移除的元素的个数。
item1, item2,. . .,itemN是必选项。要在所移除元素的位置上插入的新元素。
JavaScript中splice函数方法可以移除从 start 位置开始的指定个数的元素并插入新元素,从而修改 arrayObj。返回值是一个由所移除的元素组成的新 Array 对象。
reverse :将数组反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
sort (orderfunction):按指定的参数对数组进行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
slice (start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
join (separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"
JavaScript取数组里最大/最小值,去重复
<script type="text/javascript">
Array.prototype.unique = function(){
var a = {};
var len = this.length;
for(var i=0; i < len; i++) {
if(typeof a[this[i]] == "undefined")
a[this[i]] = 1;
}
this.length = 0;
for(var i in a)
this[this.length] = i;
return this;
}
Array.prototype.max = function(){ //最大值
return Math.max.apply({},this)
}
Array.prototype.min = function(){ //最小值
return Math.min.apply({},this)
}
var arr = [2,1,3,2,1,4,3,4,2,1];
var btn1 = document.getElementById("btn1");
btn1.onclick = function(){
arr.unique();
alert(arr.toString());
}
var btn2 = document.getElementById("btn2");
btn2.onclick = function(){
alert(arr.max());
}
var btn3 = document.getElementById("btn3");
btn3.onclick = function(){
alert(arr.min());
}
</script>
手机号正则表达式
if(!(/^1[3|4|5|8][0-9]\d{8}$/.test(phone))){
alert("请输入正确格式的告警手机号");
return false;
}
IP地址正则表达式
if(!(/^(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])$/.test(ipValue))){
alert("请输入正确格式的IP地址或者保持为空");
return false;
}
DWR设置同步后的作用域
DWREngine.setAsync(false);dwr自身的设置异步同步的函数,此时设置为同步;默认为异步,下面有补充。
设置dwr的javascript:dwr.engine.setAsync(false); 将dwr的通信方式改成同步的.(既dwr会等待服务器.将数据接受完毕后.再继续进行.)
javascript:dwr.engine.setAsync(false);的作用域.是当前的整个页面.既是javascript:dwr.engine.setAsync(false)在同一张页面上有用.既设置了以后这张页面上的所有dwr方法都是同步的. 但是其他的页面如果用到了dwr调用远程方法还是异步的.
表单提交
无自动提交表单功能的标签(如td和a href="#"),onClick=”return doSave();”
doSave();函数中可直接提交表单,之后无论返回值true或false都能提交成功;
doSave()函数中无提交表单操作时,返回值无论是true或false都不会提交表单;
有自动提交表单功能的标签(如input type="image"),表单是否提交取决于函数返回值是true或false,返回值之前不能进行提交表单操作(但是可以通过ajax更新数据,再刷新页面,这样doSave()函数返回值是true或false就无所谓了);
Dwr ajax同步模式下,如果Dwr之后代码还有return函数,后者有效,如果dwr之后没有return函数,dwr返回函数里的return 函数有效;
1、DWR的ajax方式
<script src='<%=request.getContextPath()%>/dwr/engine.js'></script>
<script src='<%=request.getContextPath()%>/dwr/util.js'></script>
var parameterStr = "";
var myAjax = new Ajax.Request(
"<%=request.getContextPath()%>/AuthMaster.do?method=checkright",
{
method: 'post',
parameters: parameterStr,
onComplete: resolveright
});
function resolveright(req){
var resultboolean = req.responseText;
if(resultboolean == "true"){
……
}else{
alert("您没有修改分配帐号的权限");
}
}
2、jQuery的ajax方法:
var url = 'SurveyAction.do?method=insert';
$.post(url,{advise:“123”,auth_type:“456”}, fun,"text");
function fun(data){
alert(data);
}
在页面弹出框内嵌页面
var returnValue =
window.showModalDialog(url,obj,'dialogWidth=650px;dialogHeight=400px;center=yes;status=no;resizable=yes');
子页面通过var obj = window.dialogArguments;取父页面传的值obj;
通过document.getElementById("bankIframe").src = URL;可指定iFrame源页面。window.createPopup()用法以及短消息提示框代码
var affairsPopup = window.createPopup();
var winstr="<table style=\"border: 2 solid #6D93C8\" width=\"241\" height=\"172\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" >";
//标题栏-beg
winstr += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default'>";
winstr += "<td style='color:white;padding-left:5px'>消息提示</td>";
winstr += "<td style='color:#ffffff;padding-right:5px;' align=right>";
winstr += "<span id=Close onclick='parent.affairsPopup.hide()' style=\""+CSSText+"font-family:System;padding-right:2px;\" title='关闭'>x</span>";
winstr += "</td></tr>";
//标题栏-end
winstr+="<tr><td height=\"30\"> </td></tr><tr><td align=\"center\"><table width=\"90%\" height=\"110\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">";
winstr+="<tr><td valign=\"top\" style=\"font-size:12px; color: #6D93C8; face: Tahoma;line-height:15pt;\">"+msgstr+"</td></tr></table></td></tr></table>";
affairsPopup.document.body.innerHTML = winstr;
affairsPopup.show(screen.width-250,screen.height-popupTop,241,172);
延迟执行一次的函数
var tem01=setTimeout("affairsPopupShow();",30);
clearTimeout(tem01);
禁止select值变化
<select id="select1" onfocus="this.defOpt=this.selectedIndex" onchange="this.selectedIndex=this.defOpt;">
Iframe或弹出框调用父页面方法时要用”parent.”做前缀
获取字符串长度(区分全/半角)
function getByteLen(val) {
var len = 0;
var expre = /[^\u4e00-\u9fa5]/;
for (var i = 0; i < val.length; i++) {
if (expre.test(val[i])){ //全角
len += 2;
}else {
len += 1;
}
}
return len;
}
Jquery遍历select的option
$("#sensetiveObjectId option").each(function(){
if($(this).val() == code){
$(this).attr("selected","selected");
}
});
JS组件周期变色(闪烁效果)
<style>
.F1 {color=#FF8000;
width=150px;
}
.F2 {color=#660033;
width=150px;
}
.F3 {color=#0080FF;
width=150px;
}
</style>
<script>
var timer;
var rate = 50
var i = 0
var F = 'F1'
function doThing(){
i++;
if (i==1) F = 'F1'
else if (i==2) F = 'F2'
else if (i==3) F = 'F3'
blinkcharacterid.className = F
if (i > 2) i = 0
timer = setTimeout("doThing()", rate)
}
function stopBlink(){
clearInterval(timer);
blinkcharacterid.className='title5';
}
</script>
两个javascript弹出窗口代码
window.open()方式
function ShowDialog(url) {
var iWidth=300; //窗口宽度
var iHeight=200;//窗口高度
var iTop=(window.screen.height-iHeight)/2;
var iLeft=(window.screen.width-iWidth)/2;
window.open(url,"Detail","Scrollbars=no,Toolbar=no,Location=no,Direction=no,Resizeable=no,
Width="+iWidth+" ,Height="+iHeight+",top="+iTop+",left="+iLeft);
}
window.showModalDialog方式
function ShowDialog(url) {
var iWidth=300; //窗口宽度
var iHeight=200;//窗口高度
var iTop=(window.screen.height-iHeight)/2;
var iLeft=(window.screen.width-iWidth)/2;
window.showModalDialog(url,window,"dialogHeight: "+iHeight+"px; dialogWidth: "+iWidth+"px;
dialogTop: "+iTop+"; dialogLeft: "+iLeft+"; resizable: no; status: no;scroll:no");
}
注意这里的第二个参数,window
用户必须在这个弹出式窗体中输入信息后才能访问其他的窗体是模态窗体就是用第二个方法就好了。
实际中window.open()的使用方式:
var resourceForm=document.getElementById("resourceForm");
resourceForm.account.value=account;
resourceForm.action='SysAutoLogin.do';
account=encodeURIComponent(account);
var newopen = window.open ("", 'pollwin', 'width=420px,height=400px,resizable=yes,top=50px,left=200px,toolbar=no, menubar=no, location=no, status=no','alwaysRaised=true;z-look=true');
newopen.focus();
resourceForm.target="pollwin";
resourceForm.submit();
JS字符编码转义
encodeURI 和 encodeURIComponent都是ECMA-262标准中定义的函数,所有兼容这个标准的语言(如JavaScript, ActionScript)都会实现这两个函数。它们都是用来对URI (RFC-2396)字符串进行编码的全局函数,但是它们的处理方式和使用场景有所不同。为了解释它们的不同,我们首先需要理解RFC-2396中对于URI中的字符分类 :
保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")" ;
基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字;
在介绍完上面三类字符串后,我们就非常容易来解释encodeURI和encodeURIComponent函数的不同之处了:
encodeURI: 该函数对传入字符串中的所有非(基本字符、Mark字符和保留字符)进行转义编码(escaping)。所有的需要转义的字符都按照UTF-8编码转化成为一个、两个或者三个字节的十六进制转义字符(%xx)。例如,字符空格" "转换成为"%20"。在这种编码模式下面,需要编码的ASCII字符用一个字节转义字符代替,在\u0080和\u007ff之间的字符用两个字节转义字符代替,其他16为Unicode字符用三个字节转义字符代替 ;
encodeURIComponent: 该函数处理方式和encodeURI只有一个不同点,那就是对于保留字符同样做转义编码。例如,字符":"被转义字符"%3A"代替;
之所以有上面两个不同的函数,是因为我们在写JS代码的时候对URI进行两种不同的编码处理需求。encodeURI可以用来对完整的URI字符串进行编码处理。而encodeURIComponent可以对URI中一个部分进行编码,从而让这一部分可以包含一些URI保留字符。这在我们日常编程中是十分有用的。比如下面的URI字符串:
http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html
在这个URI字符串中。send-to-friend.aspx页面会创建HTML格式的邮件内容,里面会包含一个链接,这个链接的地址就是上面URI字符串中的url值。显然上面的url值是URI中的一个部分,里面包含了URI保留关键字符。我们必须调用encodeURIComponent对它进行编码后使用,否则上面的URI字符串会被浏览器认为是一个无效的URI。正确的URI应该如下:
http://www.mysite.com/send-to-friend.aspx?url=http%3A%2F%2Fwww.mysite.com%2Fproduct.html,详细出处参考:http://www.jb51.net/article/22880.htm
例子
encodeURI
复制代码 代码如下:
var uri="my test.asp?name=st?le&car=saab";
document.write(encodeURI(uri));
上面的输出如下:
my%20test.asp?name=st%C3%A5le&car=saab
encodeURIComponent
复制代码 代码如下:
var uri="http://jb51.net/my test.asp?name=st?le&car=saab";
document.write(encodeURIComponent(uri));
上面的输出如下:
http%3A%2F%2Fjb51.net%2Fmy%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab
其他
在ECMA-262标准中还定义了和这两个encode函数向对应的decode全局函数,它们是decodeURI和decodeURIComponent。我们可以用它们来decode编码后的字符串
详细出处参考:http://www.jb51.net/article/22880.htm
Ajax调用方式(jQuery的ajax和DWR的ajax会有冲突)
1#jQuery方式
<script type="text/javascript" src="${path}/js/jquery.min.js">
</script>
#################################################################
var parameterStr = “bussName=117001”;
$.ajax({
url: "CashboxPolicy.do?actionType=getappResType",
async: false,
type: "post",
data:parameterStr,
complete:callbackChangeAppRes
});
function callbackChangeAppRes(req){
var categorys = req.responseText;
}
2#dwr方式
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
<script src='<%=request.getContextPath()%>/dwr/interface/AccCashboxPolicyDaoImpl.js'></script>
####################################################################
DWREngine.setAsync(false);
AccCashboxPolicyDaoImpl.isExistPolicyName(
name,myPolicyId,function(yesorno){
if(yesorno == "YES"){
alert("该策略名已存在!");
}
});
DWREngine.setAsync(true);
jQuery美元符号冲突问题
如要使用$.ajax可采用如下两种方式
jQuery.ajax;
var venusHu = jQuery.noConflict();
venusHu.ajax;
根据select id操作option
for(i=document.getElementById("sceneCategoryid").options.length-1;i>=0;i--){
document.getElementById("sceneCategoryid").options.remove(i);
}
document.getElementById("sceneCategoryid").add(new Option("请选择场景类别","-1"));
IE的td标签中字符串自动换行
<td style="word-break:break-all">
JavaScript 全局函数
JavaScript 中包含以下 7 个全局函数,用于完成一些常用的功能(以后的章节中可能会用到):escape( )、
eval_r( )、isFinite( )、isNaN( )、parseFloat( )、parseInt( )、( )。
1. escape( )
escape( ) 函数以一个 string 对象或表达式为参数并返回一个 string 对象。参数指定的字符串中的所有非字
母字符被转换成以 XX% 表示的等价数字,XX 是一个表示非字母字符的十六进制数。
以下示例显示了 escape( ) 函数的作用。
2. eval_r( )
eval_r( ) 函数将通过参数传入的一个包含 JavaScript 语句的字符串作为一个 JavaScript 源代码执行。eval_r(
) 返回执行 JavaScript 语句的返回值。
例如,在编写跨浏览器代码时,可以使用以下代码段:
<script type="text/javascript">
eval_r("x=10;y=20;document.write(x*y)")
document.write(eval_r("2+2"))
var x=10
document.write(eval_r(x+17))
</script>
3. isFinite( )
isFinite ( ) 函数用于确定一个变量是否有界,如果有界则返回 true,否则返回 false。所谓有界是指表达式
的值界于 MAX_VALUE 和 MIN_VALUE 之间。
4. isNaN( )
isNaN( ) 函数用于确定一个变量是否是 NaN,如果是,则返回 true,否则返回 false。NaN 代表 Not a
Number,表示非数,即不是任何数。
例如,isNaN(12) 返回 false,isNaN('a') 返回 true,isNaN(true) 返回 false(因为此时 true 被当作数字
1)。
5. parseFloat( )
parseFloat( ) 函数用于将字符串开头的整数或浮点数分解出来,若字符串不是以数字开头,则返回 NaN。
6. parseInt( )
parseInt( ) 函数与 parseFloat( ) 函数类似,用于将字符串开头的整数分解出来,若字符串不是以数字开头
,则返回 NaN。
例如,如果将刚才的 parseFloat( ) 函数示例中的所有 parseFloat 都用 parseInt 代替。
7. ( )
( )函数将参数传递来的字符串中的十六进制码转换成 ASCII 码并返回,它完成 escape( ) 函数的逆
操作。例如,("Tom & and Jerry show") 的返回值为 "Tom & Jerry show"。
Javascript数据类型
var a1;
var a2 = true;
var a3 = 1;
var a4 = "Hello";
var a5 = new Object();
var a6 = null;
var a7 = NaN;
var a8 = undefined;
alert(typeof a); //显示"undefined"
alert(typeof a1); //显示"undefined"
alert(typeof a2); //显示"boolean"
alert(typeof a3); //显示"number"
alert(typeof a4); //显示"string"
alert(typeof a5); //显示"object"
alert(typeof a6); //显示"object"
alert(typeof a7); //显示"number"
alert(typeof a8); //显示"undefined"
js中的数据类型有undefined,boolean,number,string,object等5种,前4种为原始类型,第5种为引用类型。
从上面的代码中可以看出未定义的值和定义未赋值的为undefined,null是一种特殊的object,NaN是一种特殊的number。
从上面的代码可以得出结论:(1)undefined与null是相等;(2)NaN与任何值都不相等,与自己也不相等。