`
lancijk
  • 浏览: 388447 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JS 中的条件判断

    博客分类:
  • JS
阅读更多

JavaScript 是一种可以在浏览器中运行的脚本语言,是一种弱语言(相对于C,C#,JAVA而言),只要是计算机语言就会使用到条件判断式,而JavaScript作为一种“弱”语言,它的条件判断常常令人困惑不解,特别是有其它强语言编程经历的人来说,更是不可理喻!高手和无惑的人别取笑,我自己也曾经有一段时间郁闷过。先写一个例子吧:

var s = "meizz";
if (s && s==true)
{
alert("Is true");
}

咱先不管上面的代码运行的结果正确与否,我给变量 s 赋的是字符型,而在后面的 if 条件判断式里是直接把变量 s 作为一个判断表达式写出的,若是在强语言里对字符型的变量要么是判断它的类型是否是字符型或者是判断这个变量的值是否等于某字符串,但在 javascript 里就是没有用类型判断(typeof)也没有值判断(==)而就是这么孤伶伶地在那里,就可以作为一个条件判断表达式。当然这种单独作为条件表达式不只是字符型变量,也可以是数字型变量,也可以是一个对象,也可以是一个函数或者方法等等。这就正是这种语法令人费解的地方。

我测试统计了一下:在 JavaScript 里,不为空 "" 的字符串、不为 0 的数字、不为 null 的对象、不为 undefined 的对象属性、布尔型 true,单独作为判断式里的一个表达式时 JavaScript 通通认定为真(true),反之则为假(false)

原因为是JS脚本没有强变量类型,你前一句赋值 var s = "meizz"; 后一句你甚至马上可以写成 s = function(){}; ,中间没有任何的类型转换,而这些写法在强语言里是不可思议的,甚至是大逆不道的(根本就不支持这种语法),但在JS脚本里却是那么的自然。原因就是没有强制变量类型, 变量类型是动态的,也就是说变量本身是没有类型的,变量的值是有类型的。呵呵,这里扯到其它模块去了,嗯,关于变量类型我另外再写文章讨论吧。

说到这里,就不难理解 if (s && .....这句的判断式了,同样的道理,我甚至可以 function s(){} 然后再用 if (s && .... 或者 var s = document.getElementById("ObjectId"); if (s && .... 这样语法在JS脚本里都是没错的,至于判断的结果可以参考上面的那段统计结果。

现在再来讨论上面的那几句代码的运行结果,多个条件判断式的结果合成运行只有“与”和“或”,到于“非”因为它是一元运行符,只针对单个值,比如 if (!s) ... 至于条件式不只一个的时候条件式的结果只有与和或的运行。与(&&),或(||)。上面的那句条件式:if (s && s==true) 就是两个条件式的合成判断。至于与运算(只要一个值为false则值为false)或运算(只要一个值为true则值为true)这些运算细节我就不多说了,教科书比我的笔头强多了。现在来分析这个判断式:这是一个“与”运算。第一个判断式 s ,因为它的字符型值不为 "" ,在JS当然认为它等同于 true,第二个判断式是 s==true,显然这个不相等,值为 false,因为是“与”运算,当然整个条件判断式的结果是 false,所以不会运行 alert()。

第三,我这里说说几个很特殊的条件判断。在没有任何声明(var)和赋值的情况下,直接拿一个变量来判断JS会抛出一个变量未定义的错误出来。比如:

if (ss) alert("条件判断结果为 true!");

运行这句代码就会出错。因为这个变量 ss 从未被声明赋值过,这种情况不等同于上述的 null "" undefined。这种情况一般会发生在什么地方呢?一是自己写代码不小心未声明,二就是对网页里没有的控件进行操作直接用ID来操作的时候,比如 if (InputId.value!="") ... ,若是网页里根本就没有 id="InputId" 的文本框或者在执行这句脚本操作的时候这个文本框还没有被浏览器加载,那也就抛出变量未定义的错误。

结果的办法是:第一种情况用 typeof 判断。if (typeof(ss)=="undefined") alert("变量未定义"); ,第二种情况则不要直接使用ID来引用对象而使用标准的对象引用。例:

var e = document.getElementById("InputId"); //IE里以前是用 document.all.InputId
if (e && e.value!="") ;//......

这样就不会出这种错误了。

那么就上面这句代码有人会说一定要这样写呢,为什么不直接

if(document.getElementById("InputId").value != "") ;//....

这样的代码不是更精练吗?城然代码是精简了,但错误也来了。只要网页里没有这个对象或者这个对象在脚本执行的时候还未被加载到,就会报错。原来是 document.getElementById("InputId") 返回了 null 值,而 null 显然是没有 value 属性的,而我那句代码也用到了 e.value 来取属性但就没有报错,原因在于C系列的语言在多个条件式里的另一外属性:多个条件判断式组合判断时,先看第一个条件式,若已经符合条件时,就不会再去判断第二个判断式;也就是在第一个条件判断式未达到标准时再会去判断第二个判断式,依此类推直至最后。if (e && e.value!="") 是两个判断式的组合判断,这是一个“与”运算,只要一个判断式为 false 则整个值都为 false。第一个判断式 e 由于不存在或者未加载到返回了 null,而在JS里 null 就等同于 false ,这样不用后面的判断也可得到整个组合判断的结果是 false 了,所以系统就不会再去判断后面的那句 e.value 了。这点与B系列语言不同,尤其要注意。在B语言中 if e and e.value!="" then 这样的语句是先把所有的判断式都运算一遍后最后再做组合的“与”运算。所以这句代码在JS里是正确的,若放在VBS里就不一定正确了。

好了,肚里的货不多,文笔又比较烂,就写这么多了,望大家多多指正!

分享到:
评论

相关推荐

    js判断节假日实例代码

    在JavaScript中,实现判断节假日的功能主要涉及到日期对象的处理和数组操作。以下是对这个实例代码的详细解析: 首先,我们看到代码中定义了两个数组,`jrdate_2017` 和 `jrdate_2018`,分别包含了2017年和2018年的...

    头歌教学实践平台 Web前端开发基础 JavaScript学习手册六:JS条件语句

    在JavaScript中,条件语句是控制程序流程的重要工具,它们允许我们根据不同的条件执行不同的代码块,从而实现逻辑判断和决策。本篇将深入探讨JavaScript中的条件语句。 首先,最基础的条件语句是`if...else`语句。...

    JS的判断与命令规格

    虽然给定的文件内容与标题描述存在较大偏差,但从JavaScript的角度出发,我们讨论了JS中的条件判断、命令规格(尤其是函数调用),以及JavaScript在数据分析领域的应用。JavaScript作为一门强大的脚本语言,不仅适用...

    javaScript中金额的有效判断

    ### JavaScript中金额的有效判断 在Web开发中,对用户输入的数据进行有效的验证是十分重要的,尤其是在涉及金额的情况下。本文将详细介绍如何在JavaScript中实现对金额的有效判断,包括但不限于空值检查、非数值...

    javascript if条件判断方法小结

    JavaScript中的if条件判断是编程中常用的一种控制流程语句,用于基于不同的条件来执行不同的代码块。当编写代码需要根据不同情况做出决策时,条件语句是非常重要的工具。 在JavaScript中,主要的条件语句包括if语句...

    JS中比Switch...Case更优雅的多条件判断写法

    在JavaScript编程中,多条件判断是经常会遇到的需求,通常情况下,开发者会使用if-else if-else语句或者switch-case语句来实现多条件判断。然而,还有一种更优雅且简洁的判断方式,即对象属性判断法。本文将详细解释...

    js 判断点是否在一个区域里面

    通过调用`crossMul`函数并结合几何条件判断是否相交。 #### 点与多边形检测函数 ```javascript var checkPP = function(point, polygon) { var p1, p2, p3, p4; p1 = point; p2 = {x: -100, y: point.y}; var ...

    Javascript判断常用Demo

    如示例代码,限制只允许输入数字和小数点,可以使用条件判断`(event.keyCode||event.keyCode>57)&&(event.keyCode!=46)`来阻止其他键的输入。 6. **checkbox的全选/取消**: 实现复选框全选和取消全选功能,可以...

    js判断数组是否相等的方法

    在JavaScript中,判断两个数组是否相等是一个常见的需求,尤其在处理数据比较或者验证时。根据标题和描述,我们可以区分两种不同的场景: 1. **数组完全相等**:在这种情况下,不仅要求数组中的元素相同,而且元素...

    js判断当前时间是哪个时间段(早,中,晚).pdf

    在JavaScript编程中,判断当前时间属于一天中的哪个时间段(早、中、晚)是一个常见的需求,这通常用于个性化用户交互,比如问候语的显示。在提供的代码中,`dateState()` 函数就是一个实现这一功能的例子。下面将...

    JavaScript条件判断_动力节点Java学院整理

    在多重条件判断中,一旦某个条件为真,就会执行相应的代码块,而不会再继续判断后续的条件。另外,由于else总是和最近的未匹配的if配对,所以要注意正确地使用花括号,以确保逻辑的正确性。 关于代码块的编写,还有...

    Vue3.x中使用JavaScript表达式 、条件判断、 计算属性和watch侦听.zip

    Vue3.x作为一款流行的前端框架,它在设计上更加注重性能和灵活性,为开发者提供了丰富的功能,包括在模板中使用JavaScript表达式、条件判断、计算属性以及watch侦听器。这些特性极大地增强了Vue应用的逻辑处理能力。...

    通过js判断访问请求来路进行页面跳转的示例

    本示例将介绍如何使用JavaScript进行来路判断并实现页面跳转。 首先,我们来看`1.js`和`2.js`这两个JavaScript文件。它们可能包含了判断和处理来路信息的代码。通常,我们可以使用`document.referrer`属性来获取...

    javascript常用判断函数

    本文将详细讲解JavaScript中的几个常见判断函数,这些函数可以帮助开发者进行数据类型的检查和验证。 首先,我们来看`DataLength`函数。这个函数的主要功能是计算字符串的长度,但与JavaScript原生的`length`属性...

    js判断图片真实性(非判断文件后缀)

    如果需要支持这些格式,只需在条件判断中添加相应的比较即可。 总之,通过这种方法,前端开发者可以在用户上传图片时提供额外的安全保障,避免非图片文件的误传,从而提高系统的安全性。然而,这种方法并不完美,...

    JavaScript中的条件判断语句使用详解

    JavaScript中的条件判断语句是编程中的基础概念,它允许我们根据不同的条件来执行不同的代码块。在JavaScript中,条件判断语句主要有以下几种形式:if语句、if...else语句、if...else if...else语句。这些语句是程序...

    js 树形结构数据遍历条件判断删除对应数据.pdf

    在JavaScript编程中,处理树形结构数据是一种常见的需求,特别是在数据可视化、文件系统管理或组织层级结构等场景。树形结构数据通常包含嵌套的数组,每个元素代表一个节点,可能有子节点(children)属性。`...

    Vue.js期末总复习

    2. 下列指令中,不能实现条件判断的是v-bind。 Vue.js提供了多种指令,例如v-if、v-else、v-show等,用于实现条件判断。v-bind指令用于绑定数据,但不能实现条件判断。 3. 下列代码的运行结果为10。 在Vue.js中,...

    IF条件判断2.zip

    在HTML文件`IF条件判断2.html`中,可能包含一个示例或教程,展示如何在JavaScript或其他客户端脚本语言中使用IF条件判断。这些语言在网页交互中发挥重要作用,允许动态响应用户操作。 总的来说,IF条件判断是编程和...

    JavaScript条件判断和循环【JavaScript全栈入门教程3】

    JavaScript条件判断和循环【JavaScript全栈入门教程3】

Global site tag (gtag.js) - Google Analytics