位置: 编程技术 - 正文

javascript里的条件判断(javascript如何)

编辑:rootadmin
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里就不一定正确了。 好了,肚里的货不多,文笔又比较烂,就写这么多了,望大家多多指正!

推荐整理分享javascript里的条件判断(javascript如何),希望有所帮助,仅作参考,欢迎阅读内容。

javascript里的条件判断(javascript如何)

文章相关热门搜索词:javascriptj,javascript中条件语句有哪些,javascript的条件语句,javascript条件,javascript中条件语句有哪些,javascriptj,javascriptj,javascriptz,内容如对您有帮助,希望把文章链接给更多的朋友!

setTimeout和setInterval的浏览器兼容性分析 无意中测试AJAXRequest浏览器兼容性的时候,发现AJAXRequest.update方法在某些情况下在IE里有问题,经过测试找到是setTimeout和setInterval的问题。问题出现在当

整理的比较不错的JavaScript的方法和技巧第1/3页 适合阅读范围:对JavaScript一无所知~离精通只差一步之遥的人基础知识:HTMLJavaScript就这么回事1:基础知识1创建脚本块1:scriptlanguage=JavaScript2:JavaScriptcod

特殊数据的js四舍五入问题 特殊数据的js四舍五入问题2..0两数相乘:.四舍五入后结果是:.怎么回事啊?[Ctrl+A全选注:如需引入外部Js需刷新才能执行]比较

标签: javascript如何

本文链接地址:https://www.jiuchutong.com/biancheng/384915.html 转载请保留说明!

上一篇:javascript第一课(javascript教程完整版)

下一篇:jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)

  • 税务局代开发票还要纳税吗
  • 虚开增值税如何获利
  • 增值税征税范围中销售应税服务包括什么服务
  • 小微自开专票申报时怎么填写
  • 什么情况需要预缴增值税
  • 预期信用损失影响坏账准备吗
  • 不动产租赁服务的税率是多少
  • 水利建设专项收入的税率是多少?
  • 小规模旅游业差额增值税税率
  • 收到厂家给医药的短信
  • 会计录入凭证怎么录入
  • 发票丢了企业所得怎么办
  • 个税登记app
  • 货币性短期薪酬影响损益的金额
  • 用友为啥会出现期初调整
  • 合作保证金可以退吗
  • 境外公司委托境内公司提供劳务
  • 对公业务指什么
  • 出口退税和企业所得税
  • 非正常工资的个税是多少
  • 跨区域施工要交什么税
  • 企事业承包承租经营所得税率是多少
  • 所得税预缴资产怎么算
  • 暂估收入的凭证怎么做
  • 财务费用结转本年利润借贷方怎么记
  • 收到转账支票又背书转让怎么写会计科目
  • 利润分配补亏
  • 苹果mac怎么复制文件到u盘 免费软件
  • 去年的管理费用怎么冲
  • TP-Link TL-WR841N管理员密码(初始密码)是多少
  • php数组函数 菜鸟
  • 代扣代缴个人所得税手续费返还 增值税
  • 工资属于收益类科目吗
  • 结转本月收入类账户到本年利润
  • 购车的车辆购置税怎么交
  • 项目辅材计入什么科目
  • fastjson 解析
  • Python Module — OpenAI ChatGPT API
  • 2022前端面试题及答案
  • 非营利组织缴纳增值税账务处理
  • 在计算应纳税所得额时,纳税人因自然灾害
  • sql2000日志清理
  • 企业进项税和销项税怎么抵扣
  • 发票已经认证后怎么撤销
  • 固定资产摊余价值怎么计算
  • mysql复制粘贴
  • 销售明细账本怎么填写
  • 党费返还款怎么做分录
  • 小规模注销时盈余怎么算
  • 企业间借款利息涉税处理
  • 期末结账后没有余额的科目
  • 企业注销前是不是资产必须处理完
  • 大数据量高并发症有哪些
  • 利用sql函数生成数据
  • mysql 5.6.23 winx64.zip安装详细教程
  • xp恢复回收站删除文件
  • win32k.sys是什么
  • 电脑出现黑屏英文要怎么处理
  • 多系统安装方法
  • 苹果电脑bim
  • 忘记mysql密码
  • 联想系统win8
  • win10应用商店是灰的
  • win10系统光驱
  • centos7.5安装桌面
  • 如何打开win7
  • 使用自带DISM工具修复Windows8.1映像
  • bootstrap导航有哪些
  • bootstraptable教程
  • javascript中声明变量的关键字
  • 淘宝店铺首页导航栏css
  • Unsolved bug in fltk-1.1.10/src/filename_list.cxx for scandir --已解决!
  • javascript中array数组对象的含义及常用方法
  • 安卓手机查看sd卡
  • 提出好的建议
  • Android---43---Service之IntentService
  • android程序代码
  • js中提交表单
  • 外经证开错了怎么办
  • 海员证办理流程需要什么手续时间多长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设