• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
邹天得
博客园    首页    新随笔    联系   管理    订阅  订阅
javascript数据类型

 

一、6大语言类型

string

number

boolean

null

undefined

object

其中null有时候被当做对象(type of null返回"object"),这是语言的一个bug:不同对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二进制表示全是0,自然前三位也是0。

 

二、复杂基本类型

函数,就是对象的一个子类型( 从技术角度来说就是“ 可调用的对象”)。 JavaScript 中的函数是“ 一等公民”, 因为它们本质上和普通的对象一样( 只是可以调用), 所以可以像操作其他对象一样操作函数( 比如当作另一个函数的参数)。
数组,也是对象的一种类型, 具备一些额外的行为。 数组中内容的组织方式比一般的对象要稍微复杂一些。

 

三、9大内置对象

JavaScript 中还有一些对象子类型, 通常被称为内置对象:

String

Number

Boolean

Object

Function

Array

Date

RegExp

Error

其中,

原始值 "I am a string" 并不是一个对象, 它只是一个字面量, 并且是一个不可变的值。如果要在这个字面量上执行一些操作, 比如获取长度、 访问其中某个字符等, 那需要将其转换为 String 对象。
幸好, 在必要时语言会自动把字符串字面量转换成一个 String 对象, 也就是说你并不需要显式创建一个对象。 JavaScript 社区中的大多数人都认为能使用文字形式时就不要使用构造形式。
思考下面的代码:
var strPrimitive = "I am a string";
console.log( strPrimitive.length ); // 13
console.log( strPrimitive.charAt( 3 ) ); // "m"
使用以上两种方法, 我们都可以直接在字符串字面量上访问属性或者方法, 之所以可以这样做, 是因为引擎自动把字面量转换成 String 对象, 所以可以访问属性和方法。
同样的事也会发生在数值字面量上, 如果使用类似 42.359.toFixed(2) 的方法, 引擎会把
42 转换成 new Number(42)。 对于布尔字面量来说也是如此。

null 和 undefined 没有对应的构造形式, 它们只有文字形式。

相反, Date 只有构造, 没有文字形式。
对于 Object、 Array、 Function 和 RegExp( 正则表达式) 来说, 无论使用文字形式还是构造形式, 它们都是对象, 不是字面量。 在某些情况下, 相比用文字形式创建对象, 构造形式可以提供一些额外选项。 由于这两种形式都可以创建对象, 所以我们首选更简单的文字
形式。 建议只在需要那些额外选项时使用构造形式。
Error 对象很少在代码中显式创建, 一般是在抛出异常时被自动创建。 也可以使用 newError(..) 这种构造形式来创建, 不过一般来说用不着。

 

posted on 2017-04-08 21:16  邹天得  阅读(104)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3