Skip to content

《你不知道的javascript(中)》1.1 类型 #26

@qunzi0214

Description

@qunzi0214

内置类型

  • 空值(null)
  • 未定义(undefined)
  • 布尔值(boolean)
  • 数字(number)
  • 字符串(string)
  • 对象(object)
  • 符号(symbol)

复习下字面量和构造初始化区别:boolean、string、number字面量与对应的内置对象不等同,null和undefined没有构造形式,而Object、Array、Function和RegExp无论使用字面量还是构造形式来声明,他们都是对象。同时,javascript在操作基本类型的时候自动将之转化为内置对象

可以用 typeof 操作符来查看值的类型
typeofnull 的处理有问题,但是这个bug由来已久,今后也未必会修复

typeof undefined   // 'undefined'
typeof true   // 'boolean'
typeof 42   // 'number'
typeof '42'   // 'string'
typeof {}   // 'object'
typeof Symbol()   // 'symbol'
typeof null   // 'object'

函数和数组都是 object 的子类型。函数是可调用对象,不仅如此,函数同样可以拥有属性

typeof [1, 2, 3] // 'object'

typeof function a (b, c) {} // 'function'

a.length // 2 (参数的个数)

值和类型

javascript中变量是没有类型的,只有值才有。变量在未持有值的时候是 undefined 。此时 typeof 返回 "undefined" 。而没有在作用域中声明的变量,是 undeclared 的(运行时会报错)。同时,typeof 有一个特殊的安全防范机制,可以使其对 undeclared 的变量进行操作时同样返回 undefined 而不报错,可以利用这个机制来处理变量是否存在的问题

var helper = (typeof doSomething !== 'undefined')
  ? doSomething
  : function() { /* do something */ }

helper()

还有一种方式是,通过全局对象 window 属性访问的方式来避免报错,只不过这种方式不适用于多 javascript 环境,因为此时无法保证全局对象是 window

var helper = window.doSomething
  ? window.doSomething
  : function() { /* do something */ }

helper()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions