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 ,对前两者是佩服,对后者是爱.因为它简洁干净利索,并且还有高大 ...
随机推荐
- sgu 194 无源汇有上下界的最大流(最大流模板dinic加优化)
模板类型的题具体参考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 参考博客:http://blog.csdn.ne ...
- 单词接龙(codevs 1018)
2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 单词接龙是一个与我们经 ...
- kendo Grid Unexpected number错误
这种用了自定义function来代替默认的就需要把所有的created,update等都替换掉,不能只替换部分
- LINUX 内核内存管理
https://linux-mm.org/ http://www.cnblogs.com/liloke/archive/2011/11/20/2255737.html
- iptables防火墙原理详解+mysql pt工具
http://seanlook.com/2014/02/23/iptables-understand/
- Win10中如何把语言栏缩到系统托盘
Win10中如何把语言栏缩到系统托盘 原来语言栏是在系统托盘中的,右键点击,然后选择“显示语言栏”,就不能缩回去了: 后来在“控制面板\时钟.语言和区域\语言\高级设置”里面,有一个选项: “使用桌面 ...
- AVPlayer的使用,带缓冲
#import "ViewController.h" #import <AVFoundation/AVFoundation.h> @interface ViewCont ...
- hdu 1010 Tempter of the Bone (奇偶性剪枝)
题意:有一副二维地图'S'为起点,'D'为终点,'.'是可以行走的,'X'是不能行走的.问能否只走T步从S走到D? 题解:最容易想到的就是DFS暴力搜索,,但是会超时...=_=... 所以,,要有其 ...
- ios 视频播放代码Demo
方法一: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. / ...
- luogu3834 【模板】可持久化线段树1(主席树)
关键字:线段树 可持久化 线段树:当版本(即对应的原序列的区间[1,r])一定时,每个节点的left,right下标为值域,值为其对应的原序列区间[1,r]中元素大小在值域中的元素个数. 可持久化:新 ...