# js当中的type(数据类型) #

You-Dont-Know-JS TYPE学习笔记

在es6版本后,js一共有七种类型他们非别是:

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

当然这其中有一个特殊的类型就是“null”

typeof null === 'object' //true

这是一个公认js的bug,但是考虑到众多页面的兼容性,这个bug至今没有被修改。

在JavaScript中,变量是没有类型的,值有类型。一个变量可以代表任何值。##

var a = 42;
typeof a; // "number"

a = true;
typeof a; // "boolean"

undefined 和 undeclared 的区别

如果一个变量没有被富裕值,那么这个值就是undefined

var a;

typeof a; // "undefined"

var b = 42;
var c;

// later
b = c;

typeof b; // "undefined"
typeof c; // "undefined"

大多数的开发者认为undefined和undeclared是同义词,但是他们差别非常大

undefined是一个变量被定义了,但还没有被赋值。而undeclared是没有定义的变量

var a;

a; // undefined
b; // ReferenceError: b is not defined

//而JavaScript的报错信息也经常能够迷惑开发者。

var a;

typeof a; // "undefined"

typeof b; // "undefined"

//而typeof操作符更是加重了这些困惑。

需要注意到,虽然b变量没有定义,但是被typeof操作符执行时,并没有报错

typeof 操作符的特殊用法。(检测变量是否存在)


// oops, this would throw an error!
if (DEBUG) {
    console.log( "Debugging is starting" );
}

// this is a safe existence check
if (typeof DEBUG !== "undefined") {
    console.log( "Debugging is starting" );
}

还有一种方法:

if (window.DEBUG) {
    // ..
}

if (!window.atob) {
    // ..
}

但是这种方法是大多数开发者所极力避免的,因为你的js代码可能运行在node中,node中是不存在window顶级对象的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 1,421评论 3 9
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 359评论 0 0
  • 你不懂JS:类型与文法 第一章:类型 大多数开发者会说,动态语言(就像JS)没有 类型。让我们看看ES5.1语言规...
    xiayujlu阅读 198评论 0 0
  • 个人博客:https://yeaseonzhang.github.io 花了半个多月的时间,终于又把“JS红宝书”...
    Yeaseon阅读 11,777评论 9 52
  • 前两天,用React把 之前的 基于树莓派3B,DHT11/DHT22,LCD1602的一个实时温度湿度检测系统 ...
    yfgeek阅读 1,037评论 2 4

友情链接更多精彩内容