以下纯属个人见解,若有更好的意见,请写下来,共同进步
发现ECMAScript中的undefined类型和null类型很有意思。。。。。他们是ECMAScript中唯一只有一个值的类型,而且一般情况下,在代码调试中,一旦提示该类型,都很让人纠结和蛋疼,所以这里就爆一下他们的内幕。。。
首先,Undefined类型和null类型都是原始类型,也就是说,声明为该类型的值为直接存放在栈中。
undefined类型的值是"undefined",为什么我没有用也是呢,因为前面表示的是类型,后面表示的是它的字面值。
null类型的值是"null",为什么我也没有用也是呢,因为前面表示的也是类型,后面表示的也是它的字面值。
下面说下变量声明:
undefined:
声明后未初始化的变量,和声明为undefined类型的变量当进行==判断的时候是相等的,进行typeof运算后,他们的类型也都是undefined,值也相同。例如:
var u1;
alert(u1==undefined)
结果:true
但是,未声明的变量和undefined类型不太一样,虽然用typeof运算出来他们都是undefined类型,例如:
alert(u2==undefined)
结果:报错,并提示u2未定义
而用alert(typeof(u2))
结果:undefined
说明:未声明的变量类型为undefined,但值并不是undefined。typeof运算只运算类型。而==运算区分类型和值,W3C说的是除了typeof运算符,其他运算符只能用于声明、定义过的变量。
W3C说undefined 实际上是从值 null 派生来的,因此 ECMAScript 把它们定义为相等的。
注意:我这里使用的undefined和null都是小写,因为在javascript中,是区分大小写的,例如:
if(NULL == undefined){
alert("相等")
}
结果:提示NULL未定义,这里把NULL当成了一个变量,而undefined是一个原始类型值,就好像number。
if(NULL == undefined){
alert("相等")
}
结果:相等。
null:
使用typeof运算null会发现结果是object,这个结果让人很不满意,如果按照正常的逻辑思维,undefined类型用typeof运算的时候就也应该是object。这里W3C说 这是JavaScript 最初实现中的一个错误,然后被 ECMAScript 沿用了。现在,null 被认为是对象的占位符。
上面说过,undefined实际上时null派生来的,这里我也有几个疑问:
1.如果这样的话,undefined类型的底层实现是不是也是object?使用==运算符运算undefined和null,结果他们是相等的,这说明他们的值和类型都是相同的。那是不是就可以直接推出undefined类型底层实现的时候,类型就是object并且值就是null?
分享到:
相关推荐
在 JavaScript 中,undefined 是一个基本数据类型,表示变量未被声明或未被赋值。例如,变量 a 未被声明时,typeof a 将返回 "undefined"。需要注意的是,undefined 不是一个常量,可以被赋值为其他值。 在判断一个...
这篇文档《JavaScript程序设计-JavasScript类型之undefined.pdf》主要探讨的是JavaScript中的Undefined类型及其使用。 首先,Undefined类型只有一个值,那就是undefined。当我们在JavaScript中使用`var`关键字声明...
这个问题源于JavaScript的动态类型特性和在某些情况下对`undefined`标识符的可修改性。 在JavaScript早期版本(ES5之前),全局变量`undefined`是可以被重新赋值的,这可能导致混淆和错误。例如,以下代码片段展示...
在JavaScript中,Undefined类型有三种情况: 1. 变量未初始化时,typeof返回类型为undefined。例如: ``` var oTemp; alert(typeof oTemp); // outputs "undefined" ``` 2. 变量未定义时,typeof返回类型为...
JavaScript是一种动态类型的语言,这意味着变量可以存储不同类型的值,包括字符串、数字、布尔值、对象、数组、null和undefined。在处理这些值时,有时我们需要将一种数据类型转换成另一种,以便进行特定的操作。...
JavaScript提供了多种数据类型,包括基本和复合类型: 1. **基本数据类型**: - **数字(Numbers)**:整数和浮点数,如123,120.50。 - **字符串(Strings)**:文本字符序列,如"This text string",可以用单...
首先,Undefined类型是一个特殊的值,它只有一个值,即`undefined`。在JavaScript中,当声明了一个变量但未对其进行赋值时,该变量的值就会是`undefined`。例如: ```javascript var oValue; alert(oValue == ...
在JavaScript编程中,理解基本类型和引用类型的区别非常重要,因为这关系到变量的存储、操作以及内存管理等核心概念。在给定的内容中,首先介绍了JavaScript中的基本数据类型和引用数据类型的定义、区别和联系,并...
if (reValue== undefined){ alert(“undefined”); } 发现判断不出来,最后查了下资料要用typeof 方法: 代码如下: if (typeof(reValue) == “undefined”) { alert(“undefined”); } ...
JavaScript 数据类型是编程语言的基础,理解它们至关重要。在JavaScript中,数据类型分为两种主要类别:基本数据类型(也称为原始数据类型)和引用数据类型。 基本数据类型包括五种: 1. **String**:字符串类型,...
本文将深入探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型,以及如何进行强制类型转换。 首先,我们要了解JavaScript中的数据类型主要有六种: 1. **字面量、变量和标识符**: - **字面量**是指在...
一般的程序语言,表示空的只有null,但javascript的设计者Brendan Eich却设计了一个undefined,这无疑增加了程序复杂度,但这样做也是有一定原因的。本文将详细介绍javascript中的undefined和null 历史原因 ...
JavaScript 类型系统中,`undefined` 和 `null` 是两种重要的原始值,它们各自具有特定的含义和用途。本文将深入探讨这两种类型的起源、差异、使用场景以及类型转换。 首先,`undefined` 在 JavaScript 中主要表示...
Undefined类型的出现场景主要有以下几种:声明变量但未赋值、typeof检测未声明变量的数据类型、没有返回值的函数执行结果、函数没有传入参数以及使用void表达式。 接下来是Null类型。Null是JavaScript中的另一种...
JavaScript 数据类型转换详解 JavaScript 中有多种数据类型,包括数值类型、字符串类型、布尔类型等。这些类型之间可以进行转换,以下是 JavaScript 中最常用的数据类型转换方法。 一、转为字符串 在 JavaScript ...
它支持基本数据类型如数字(Number)、字符串(String)、布尔值(Boolean)、空值(null)和未定义值(undefined),以及复合数据类型如对象(Object)和数组(Array)。 #### 函数 函数是JavaScript中最核心的概念之一,它们...
变量是存储数据的容器,JavaScript支持多种数据类型,如字符串、数字、布尔值、null、undefined、对象和Symbol等。控制结构是程序流程的重要组成部分,包括条件语句(如if...else)和循环(如for、while和do...while...
JavaScript是一种广泛用于网页和网络应用的脚本语言,它的核心特性之一就是其灵活的数据类型系统。在JavaScript中,数据类型分为两大类:基本数据类型和引用数据类型。 1. **字面量**:字面量是指直接在代码中表示...
在JavaScript中,数据类型是理解语言基础的关键。根据描述,我们可以将JavaScript的数据类型分为两类:简单类型和复杂类型。简单类型包括null、undefined、boolean、String和Number,而复杂类型只有Object。 首先,...
JavaScript 类型检查库 types.js.zip 包含了一个名为 TypesJS 的工具,这是一个专门用于JavaScript对象类型检测的库。在JavaScript这种动态类型的编程语言中,类型检查尤为重要,因为变量的类型可以在运行时改变,这...