URL后面#号是代表什么?
- # 代表页面中的某个位置,也称为地址hash值
- #XX 作用当前可视区域移动到页面xx位置
- # 仅对浏览器起作用,对服务器无用,所以HTTP请求不包括#(#之后的字符都不会被发送到服务器端。)
- 改变#不触发网页重载
- 改变#会改变浏览器的访问历史
如何获取URL中#号的值?
- 使用window.location.hash这个属性可读可写
如何监听URL中#号值的变化
- onhashchange事件(IE8+、Firefox 3.6+、Chrome 5+、Safari 4.0+支持该事件。)
window.addEventListener("hashchange", function(){
var hash = window.location.hash.slice(1);
});
浏览器中的localStorage如何存取?
- localStorage存值
localStorage.setItem(key,val);
- localStorage取值
var data = localStorage.getItem(key);
传统表单提交前的数据校验如何实现?
- 使用表单提交事件
onSubmit
,返回ture
,表单继续提交,返回false
,表单终止提交
<form name="formLogin" action="user.php" method="post" onSubmit="userLogin()">
<table width="100%" border="0" align="left" cellpadding="3" cellspacing="5">
<tr>
<td width="15%" align="right">{$lang.label_username}</td>
<td width="85%"><input name="username" type="text" size="25" class="inputBg"
placeholder="请输入用户名/手机号"/></td>
</tr>
<tr>
<td align="right">{$lang.label_password}</td>
<td>
<input name="password" type="password" size="15" class="inputBg"/>
</td>
</tr>
<!-- 判断是否启用验证码{if $enabled_captcha} -->
<tr>
<td align="right">{$lang.comment_captcha}</td>
<td><input type="text" size="8" name="captcha" class="inputBg"/>
<img src="captcha.php?is_login=1&{$rand}" alt="captcha"
style="vertical-align: middle;cursor: pointer;"
onClick="this.src='captcha.php?is_login=1&'+Math.random()"/></td>
</tr>
<!--{/if}-->
<tr>
<td colspan="2"><input type="checkbox" value="1" name="remember" id="remember"/><label
for="remember">{$lang.remember}</label></td>
</tr>
<tr>
<td> </td>
<td align="left">
<input type="hidden" name="act" value="act_login"/>
<input type="hidden" name="back_act" value="{$back_act}"/>
<input type="submit" name="submit" value="" class="us_Submit"/>
</td>
</tr>
<tr>
<td></td>
<td class="f3">找回密码:(<a href="user.php?act=qpassword_name" class="f3">密码问题</a> <a
href="user.php?act=get_password" class="f3">邮件</a> <a
href="user.php?act=sms_get_password" class="f3">短信验证</a>)
</td>
</tr>
</table>
</form>
function userEdit()
{
var frm = document.forms['formEdit'];
var email = frm.elements['email'].value;
var msg = '';
var reg = null;
var passwd_answer = frm.elements['passwd_answer'] ? Utils.trim(frm.elements['passwd_answer'].value) : '';
var sel_question = frm.elements['sel_question'] ? Utils.trim(frm.elements['sel_question'].value) : '';
if (email.length == 0)
{
msg += email_empty + '\n';
}
else
{
if ( ! (Utils.isEmail(email)))
{
msg += email_error + '\n';
}
}
if (passwd_answer.length > 0 && sel_question == 0 || document.getElementById('passwd_quesetion') && passwd_answer.length == 0)
{
msg += no_select_question + '\n';
}
for (i = 7; i < frm.elements.length - 2; i++) // 从第七项开始循环检查是否为必填项
{
needinput = document.getElementById(frm.elements[i].name + 'i') ? document.getElementById(frm.elements[i].name + 'i') : '';
if (needinput != '' && frm.elements[i].value.length == 0)
{
msg += '- ' + needinput.innerHTML + msg_blank + '\n';
}
}
if (msg.length > 0)
{
alert(msg);
return false;
}
else
{
return true;
}
}
数据类型转换规则
- 自动转换为布尔值
JavaScript 遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。系统内部会自动调用Boolean函数。
因此除了以下五个值,其他都是自动转为true。
undefined
null
0
NaN
''(空字符串)
- 自动转换为字符串
JavaScript 遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。具体规则是,先将复合类型的值转为原始类型的值,再将原始类型的值转为字符串。
字符串的自动转换,主要发生在字符串的加法运算
时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。
'5' + 1 // '51'
'5' + true // "5true"
'5' + false // "5false"
'5' + {} // "5[object Object]"
'5' + {a:12} // "5[object Object]"
'5' + [] // "5"
'5' + [1,2] // "51,2"
'5' + function (){} // "5function (){}"
'5' + undefined // "5undefined"
'5' + null // "5null"
- 自动转换为数值
JavaScript 遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number函数。
除了加法运算符(+)有可能把运算子转为字符串,其他运算符都会把运算子自动转成数值。
'5' - '2' // 3
'5' * '2' // 10
true + 3 // 4
true - 1 // 0
false - 1 // -1
'1' - 1 // 0
'5' * [] // 0
false / '5' // 0
'abc' - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
// 对象 -> NaN
// 数组
1、空数组 -> 0
2、只有一个元素数组(数值) -> 数值
3、只有一个元素数组(数值字符串) -> 数值
4、多个元素数组 -> NaN
// 函数 -> NaN
注意:null
转为数值时为0
,而undefined
转为数值时为NaN
。
比较运算(==) - 数据类型转换
记住特例:
null == underfined (true)
null == null (true)
underfined == underfined (true)
NaN == NaN (false)
除了上面这2种要记住,只有存在null、underfined、NaN
其中一个,比较都是返回fasle
==两边值类型相同时,无需转换,不同时,自动转换(全转成数值类型)
// 当比较的数据类型相同时
Number / String / Boolean ---> true
对象 / 数组 / 函数 ---> false
null / underfined ---> true
// 当比较的数据类型不相同时(转成数值类型Number)
一边是Number / String / Boolean,另一边是null / underfined 都为false
JS数组也可以存非数值Key
- 最开始认识的JS数组
var arr = ['234',123,{'name':'xiaoming'},ture];
// 修改
arr[0]="Opel";
- 最后发现JS数组也可以像PHP数组一样,可以存key
var array = new Array();
array["first"] = "my";
array["second"] = "name";
array["third"] = "is";
var arr = [];
arr["first"] = "my";
arr["second"] = "name";
arr["third"] = "is";
// 打印出数组:["first":"my","second":"name","third":"is"]
// 使用如下:
array['first']