资讯专栏INFORMATION COLUMN

JS Q&A

URLOS / 1149人阅读

摘要:系统内部会自动调用函数。因此除了以下五个值,其他都是自动转为。空字符串自动转换为字符串遇到预期为字符串的地方,就会将非字符串的值自动转为字符串。字符串的自动转换,主要发生在字符串的加法运算时。

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,表单终止提交

       
{$lang.label_username}
{$lang.label_password}
{$lang.comment_captcha}
 
找回密码:(密码问题 邮件 短信验证
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 + "
";
  }
  else
  {
    if ( ! (Utils.isEmail(email)))
    {
      msg += email_error + "
";
    }
  }

  if (passwd_answer.length > 0 && sel_question == 0 || document.getElementById("passwd_quesetion") && passwd_answer.length == 0)
  {
    msg += no_select_question + "
";
  }

  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 + "
";
    }
  }

  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"]

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88339.html

相关文章

  • 大型网站性能监测、分析与优化常见问题Q&amp;A

    摘要:后端和移动性能优化需要的时间较长,出成果较慢。大型网站上,一般通过什么方式监控性能的用户端主要是真机监测监测,都属于真实用户监测。目前主要有以下两种类型,,最终用户性能监测。,,真实用户性能监测。 showImg(https://segmentfault.com/img/bVAbWm);@tanwen110 (唐文),曾负责腾讯四大平台之一网络媒体平台的整体运维、运营规划工作;曾任百度...

    Lavender 评论0 收藏0
  • vuejs Q&amp;A

    摘要:主要特性模板渲染响应式双向数据绑定组件化开发路由虚拟好处初始视图没有优势,反而中间多了一层虚拟,所以性能没有提高更新视图优势明显减少重复生成与删除操作,减少查询定位元素的操作,能修改操作完成的就绝不使用生成与删除来操作脚手架是什么有什么作 vuejs主要特性? 模板渲染 响应式双向数据绑定 组件化开发 路由 虚拟DOM好处? 初始视图没有优势,反而中间多了一层虚拟DOM,所以性能...

    wuaiqiu 评论0 收藏0
  • JavaScript树结构深度优先算法

      什么是树  现实中树随处可见;在计算机世界,树就是一种分层结构的抽象模型。  如下图所示:  树结构的可以用在很多情景,就如下图公司的组织架构,用树就可以表达出来,如下图:  组织架构只是其中之一,比如族谱、省市等用树的结构形式展现是完全可以。  树的术语  树有很多的术语,如下图:  树:n(n≥0)个节点所构成的有限集合,当n=0时,称为空树;  节点的度:节点的子树个数,例如B节点的度就...

    3403771864 评论0 收藏0
  • 前端笔记——JS基础(原型&amp;&amp;原型链)

    摘要:基础原型原型链构造函数默认有这一行张三李四构造函数扩展其实是的语法糖其实是的语法糖其实是使用判断一个函数是否是一个变量的构造函数原型规则和示例所有的引用类型数组对象函数,都具有对象属性即可自有扩展的属性,除外所有的引用类型数组对象函数, JavaScript基础 —— 原型&&原型链 构造函数 function Foo(name, age) { this.name = na...

    n7then 评论0 收藏0
  • 通过JavaScript实现扑克牌游戏的示例代码

      我们说下想要实现,一副牌里有54张,我们可以知道 3 - 2 的牌总共有13张,这分为4个花色是 ♠️ ♥️ ♣️ ♦️ 另外加上2个大小王!第一步:形成一个数组, 就要写一个函数,利用牌数量和花色,这样可以用来形成一个双重循环将 number 里面的内容 和 flower 里面的内容 进行一个循环嵌入?最后在用 push 生成一个对象放到数组的后面?再到最后放入 大小王 。  constnu...

    3403771864 评论0 收藏0

发表评论

0条评论

URLOS

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<