当前位置: 首页 > 工具软件 > Q.js > 使用案例 >

JS Q&A

翟青青
2023-12-01

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>&nbsp;</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>&nbsp;<a
                            href="user.php?act=get_password" class="f3">邮件</a>&nbsp;<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']
 类似资料: