js-undefinde的一点延伸
前面写过一篇js中变量定义的问题:Js中判断变量存不存在的问题
本文再补充下,变量声明未初始化的情况,代码:
<script>
var a;
alert(a==undefined)//true
</script>
我们看到,声明变量初始化时,默认给了变量一个值,和undefined可以"=="。这个是一种表示"无"的值,还有1个是null。Java中只有null而无undefined.
上面的例子已经知道,变量声明未初始化"=="undefined,那如果是”全等“的情况呢?
<script>
var a;
alert(a===undefined)//true
</script>
运行上面的代码,会弹出true.这里我们知道了未初始化的变量与undefined是“全等“的。这说明, 声明变量初始化时,默认给了变量一个值,就是这个特殊的undefined。
对undefined操作会报错:比如对其用match()方法,报错如下”Uncaught TypeError: Cannot read property 'match' of undefined”。后面的代码将不会执行!
但是,笔者认为,判断一个变量是否为undefined,最好用typeof这个1元运算符。例子如下:
<script>
var a;
alert(typeof(a)=="undefined");//true
</script>
Jquery获取指定元素的属性(attr)时,如果这个元素没有这个属性,会出现什么效果呢?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<li class="perlink">
1111111111111
</li>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
$(".perlink").click(function(){
alert(typeof($(this).attr("hf"))==="undefined");//true
})
</script>
</body>
</html>
上面代码弹出,是不是跟未声明的变量弹出的很像?事实上,弹出的这个值就是undefined。”全等”运算也是true。那么,就可以这样判断一个页面元素是否用某事属性了,代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
</head>
<body>
<li class="perlink">
1111111111111
</li>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>
if(typeof($(".perlink").attr("hf"))!="undefined"){
alert("不空的时候做的事情")
}else{
alert("不做任何事情")
}
</script>
</body>
</html>
js-undefinde的一点延伸的更多相关文章
- GeoJSON JS判断某一点是否在某一区域范围之内
GeoJSON JS判断某一点是否在某一区域范围之内 算法: function isInPolygon(checkPoint, polygonPoints) { var counter = 0; va ...
- 关于js解析的一点小问题
先来看一下下面的一段代码有什么问题? <html><head><script src="./jquery.min.js"></script ...
- js变量的一点认识
js中变量包含两种不同数据类型的值,基本类型值(简单的数据段)和引用类型值(可能由多个值组成的对象).那么他们在保存方式和复制变量值是上有什么不同呢? 一.保存 只能给引用类型的值动态添加属性,不能给 ...
- js调试的一点小知识
1.如果想要js代码被XHTML和HTML解析,就可以使用如下方式 <script type="text/javascript"> //<![CDATA[ fun ...
- JS第三方中间件的延伸
js中间件 当我们在编写业务代码时候,我们无法避免有些业务逻辑复杂而导致业务代码写得又长又乱,如果再加上时间紧凑情况下写出来的代码估计会更让人抓狂.以至于我们一直在寻求更好的架构设计和更好的代码设计, ...
- 关于fibonacci数列用JS写的一点小优化
直接上代码 var month = prompt("请输入月数:") function fibobo(x) { //先定义一个已有前两项的数组,用来作缓存 var arr = [1 ...
- 关于JS闭包的一点理解
通常来讲,闭包通常是指函数内部可以访问到外部作用域的一个过程. 一.广义的定义:任何函数都产生了闭包. 二.狭义的定义:函数内部能访问到其他变量函数的作用域. 我们来看个例子 var a = 10; ...
- js处理浮点数一点思考
作为一名web开发人员,如果我们做到了涉及到费用加加减减的需求 难免会遇到浮点数的计算,就会遇到浮点数精度误差的问题 假设场景: 1.接口给你的金额单位是分,页面需要展示的金额单位为元. 最后落档金额 ...
- Vue.js的入门
介绍 vue.js 是一个客户端js库,可以用来开发单页应用.为了一个项目的选型,我前前后后的看了angular.react.vuejs ,对前两者是佩服,对后者是爱.因为它简洁干净利索,并且还有高大 ...
随机推荐
- mysql 数据的某个范围数据
select * from table_name where limit num1, num2; num1 : 开始条目 num2 :选择数目
- SpringBoot多数据源改造(二)
在上一篇的内容中,主要介绍了spring boot项目的多数据源改造的涉及的基本配置及改动.在spring项目中,常用Mybatis做ORM操作数据库,并且分页操作是避免不了的. 因此,这一篇主要介绍 ...
- Spring MVC-控制器(Controller)-可参数化视图控制器(Parameterizable View Controller )示例(转载实践)
以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parameterizableviewcontroller.htm 说明:示例基于 ...
- 关于MySQL错误 2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法
今天在外面开navicat for mysql的时候,怎么也连不上自己本机上的数据库,一直显示2005 - Unknown MySQL server host 'localhost' (0): 错误代 ...
- 查找存在某字符的文件列表,不包括svn文件
find . ! -wholename '*.svn*' -print | xargs grep "img" | awk -F ':.' '{print $1}' | uniq
- yum install tomcat
安装tomcat6 yum install tomcat6 tomcat6-webapps tomcat6-admin-webapps 启动tomcat6 service tomcat6 start ...
- 自适应阈值分割—大津法(OTSU算法)C++实现
大津法是一种图像灰度自适应的阈值分割算法,是1979年由日本学者大津提出,并由他的名字命名的.大津法按照图像上灰度值的分布,将图像分成背景和前景两部分看待,前景就是我们要按照阈值分割出来的部分.背景和 ...
- [POJ 1041] John's Trip
[题目链接] http://poj.org/problem?id=1041 [算法] 欧拉回路[代码] #include <algorithm> #include <bitset&g ...
- Mybatis:目录
ylbtech-MyBatis:目录 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 6.返回顶部 作者:ylbtech出处:http://ylbte ...
- PCB MS SQL 行转列
一.原数据: SELECT inman,indate FROM [fp_db].[dbo].[ppezhpbb] WHERE indate > '2016-5-1' AND indate < ...