我们知道,javascript是一种弱类型的语言,这意味着我们不必显式定义变量的数据类型。事实上,我们无法在 javascript 上明确地定义数据类型。而只能通过var语句显示声明变量:var myvar;
或这样隐式声明变量:myvar=myvarValue(省略var,在声明的同时初始化)。
javascript有三种基本数据类型(字符串、数值、布尔 ),两种引用数据类型(对象、数组)和两种特殊数据类型(Null 、Undefined )。对于基本数据类型和引用数据类型我们很好理解。对于特殊数据类型Null和Undefined,常常会引起我们的一些疑惑。
在 Javascript 中数据类型 Null 只有一个值:null。如果一个变量的值为null ,那么表示该变量没有保存有效的数、字符串、Boolean、数组或对象,null与vbscript中Empty的概念不相同(Empty指未初始化的变量值)。因此,我们可以通过给一个变量赋 null 值来清除变量的内容。
考查下面的代码:
function test1()
{
var a=null;
alert("typeof(a):"+typeof(a));
alert("a==0:"+(a==0));
}
结果显示:typeof(null)返回的对象类型为Object,而非类型null。这点潜在的混淆是为了向下兼容。同时,在 Javascript 中,null 与 0 不相等。
如果已声明了一个变量但还没有初始化,那么该变量的值就是 undefined。这与vbscript中Empty的概念是相同的。
如下情况使返回 undefined 值:
1、对象属性不存在;
2、声明了变量但从未赋值。
注意:很多人常犯的一个错误是:当他定义一个变量的时候未初始化,想当然地认为该变量的默认值为数字0字符串""。
我们在javascript中如何判断一个变量是否存在,可以使用如下方法:
function test2()
{
var a;
alert(typeof(a)==undefined);//false
alert(typeof(a)=="undefined");//true
alert(a==undefined);//true
}
注意:我们可以通过与undefined做比较测试一个变量是否初始化,但不能通过与 undefined 做比较来测试一个变量是否存在,而只能通过typeof(variable)=="undefined"来判断!
下面的例子将证明我的这一提示的正确性:
function test3()
{
var a;
//alert(b==undefined);//出现错误:'b'未定义
alert(typeof(b)=="undefined");//true
}
undefined 值与null做比较,考查下面的代码:
<script language="javascript">
function myObject(prop1,prop2)
{
this.prop1=prop1;
this.prop2=prop2;
}
var myObj=new myObject(null,"test");
alert("myObj.prop1==null:"+(myObj.prop1==null));
alert("myObj.prop1==undefined:"+(myObj.prop1==undefined));
alert("myObj.prop2==undefined:"+(myObj.prop2==undefined));
alert("myObj.prop3==undefined:"+(myObj.prop3==undefined));
var myobjProps="";
for(prop in myObj)
myobjProps+=prop+",";
alert("myObject的属性有:"+myobjProps);
alert("myObject.prop3 exists?:"+(("prop3" in myObj)?"YES":"NO"));
//要检查一个对象属性是否存在,可以in 运算符。
</script>
总结:undefined 值与null做比较,如下情况时,比较的结果为 true:
1、属性 myObj.prop1 包含null 值;
2、属性 myObj.prop3 不存在。
分享到:
相关推荐
JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢? 一.概述 对象是一种复合值,它将很多值(原始值或其他对象)聚合在一起...
作用域是一个变量和函数的作用范围,javascript中函数内声明的所有变量在函数体内始终是可见的,在javascript中有全局作用域和局部作用域,但是没有块级作用域,局部变量的优先级高于全局变量,通过几个示例来了解下...
javascript的变量声明具有hoisting机制,JavaScript引擎在执行的时候,会把所有变量的声明都提升到当前作用域的最前面。 先看一段代码 var v = "hello"; (function(){ console.log(v); var v = "world"; })(); ...
JavaScript中,除了五种原始类型(即数字,字符串,布尔值,null,undefined)之外的都是对象了,所以,不把对象学明白怎么继续往下学习呢?本篇文章给大家分享javascript对象深入学习总结,小伙伴们跟着小编一起...
1)介绍javascript中的eval函数的用法 (2)如何在函数内执行全局代码 ►先来说eval的用法,内容比较简单,熟悉的可以跳过。 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行...
JavaScript 的简单数据类型是数字、字符串、布尔值(true/false)、null 以及 undefined,其它所有的值都是对象。这些对象是可变的键值对集合。 对象是属性的容器,每个属性都有名字和值。属性的名字可以是包含空...
每个函数创建时默认带有一个prototype属性,其中包含一个constructor属性,和一个指向Object对象的隐藏属性__proto__。constructor属性的值为该函数的对象。在一个函数前面加上new来... [javascript] 代码如下: funct
JavaScript有5种基本的数据类型,分别是:布尔、null、undefined、String和Number。这篇文章主要介绍了JavaScript的值传递和引用传递,需要的朋友可以参考下
我们先来看一个JS中常见的JS对象序列化成JSON字符串的问题,请问,以下JS对象通过JSON.stringify后的字符... 'address': undefined, 'phone': [1234567,undefined], 'fullName': function(){ return this.firstName
本文实例讲述了JavaScript数组特性与实践应用。分享给大家供大家参考,具体如下: JavaScript 提供了一种类似数组特性的对象,它把数组的下标变为字符串,作为...//undefined console.log(numbers[1]);//one console.lo
(1)介绍javascript中的eval函数的用法 (2)如何在函数内执行全局代码 ►先来说eval的用法,内容比较简单,熟悉的可以跳过。 eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行...
JavaScript 在 1997 年被标准化时,就有 6 种数据类型,直到 ES6 出现之前,程序中的变量一定是以下 6 种数据类型之一: Undefined Null Boolean Number String Object 每种数据类型都是一系列值的组合...
我们都知道,JavaScript数据类型分两大类,基本类型(或者称原始类型)和引用类型。 基本类型的值是保存在栈内存中的简单数据段,它们是按值访问的。JS中有五种基本类型:Undefined、Null、Boolean、Number和String...
这次主要说说javascript的类型判断函数typeof和判断构造函数原型instanceof的用法和注意的地方。 typeof 先来说说typeof吧。首先需要注意的是,typeof方法返回一个字符串,来表示数据的类型。 typeof 是一个一元...
理解javascript系列博文是通过带领大家分析javascript执行时的内存分配情况,来解释javascript原理,具体会涵盖javascript预加载,闭包原理,面象对象,执行模型,对象模型...,文章的视角很特别,也非常深入,希望...
但实际上是undefined; 说到这里,我们首先说一下js逐行解析代码之前做的一些准备工作, js在逐行读代码之前,会做一些“预解析”工作,会先提前找到一些”小东西”,当然”js解析器“不会随便找一些数据的,它会...
1、Javascript变量作用域 javascript中,变量主要分为局部变量和全局变量两种,对应的作用域也是局部作用域和全局作用域。 1 局部变量和作用域 局部变量一般在函数体内部声明使用: function func(){ var i=12;//...
包含Number,String,Boolean,Null,Undefined ,Symbol。 引用类型值指的是那些保存在堆内存中的对象,所以引用类型的值保存的是一个指针,这个指针指向存储在堆中的一个对象。除了上面的 6 种基本数据类型外,...