3.基本类型

Undefined

Undefined 类型只有一个值,就是 undefined。声明变量而没有初始化时,这个值就是 undefined

// 声明未初始化的变量,变量值默认为undefined
var message;
console.log(message === undefined) // true

// 初始化值为undefined
var message = undefined
console.log(message === undefined) // true

声明未初始化的变量和未声明的变量都返回 undefined

var message
typeof message // "undefined"
typeof age // "undefined"
// 基于此,我们应该显示初始化变量,这样子当使用typeof操作符返回undefined的时候,
// 我们就可以确定变量未声明,而不是没有初始化

Null

Null 类型只有一个值,就是 null

// null值表示指向空对象的指针,所以返回object
var car = null
typeof car // "object"

如果声明变量用来保存对象,最好初始化为 null,可以用来判断对象是否已经保存了一个对象的引用

if(car != null){
    // 对 car 对象进行额外操作
}

undefined 派生于 null

console.log(null == undefined) // true

Boolean

Boolean 类型具有两个字面量值:true 和 false

将其他类型的值转化为 Boolean 类型的值

var message = "Hello World"
var messageAsBoolean = Boolean(message)

各类型的值转化为 Boolean 类型值的转换规则

数据类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 任何非 0 数字值(包括 ∞) 0 和 NaN
Object 任何对象 null
Undefined 不适用 undefined

Number

整数

var intNum = 55; // 整数

var octalNum = 070 // 八进制的56

var hexNum = 0xA // 十六进制的10

浮点数

var floatNum = 1.1

// 对于极大或极小的数值采用科学计数法
var floatNum = 3.125e7 // 等于3.125 * 10的7次方 == 31250000
var floatNum = 3e-7 // 等于 3 * 10的-7次方 == 0.0000003

浮点数计算

// 基于IEEE754数值的浮点计算的通病
0.1 + 0.2 != 0.3 // 0.3000000000000004

// 变相的计算浮点数的值
(0.1 * 10 + 0.2 * 10) / 10 = 3

数值范围

Number.MIN_VALUE // 5e-324
Number.MAX_VALUE // 1.7976931348623157e+308
// 如果计算超出JavaScript数值范围,这个数值自动保存为Infinity或者-Infinity(正负∞)

isFinite 函数(位于最大和最小值之间的数会返回 true)用于检测数值是否超出 JavaScript 数值范围

var result = Number.MAX_VALUE * 2 // Infinity
isFinite(result) // false

NaN

NaN 非数值,用于表示本来要返回数值但未返回数值的情况(避免抛出错误)

// 任何数值 * 非数值都会返回NaN
1 * 'abc' // NaN
  • NaN 涉及的操作都返回 NaN
  • NaN 不等于任何值,包括 NaN 本身
NaN * 3 // NaN
console.log(NaN == NaN) // false

isNaN

isNaN 函数用于帮助我们检查参数是否为“非数值”(参数首先会自动转化为数值,如果不能转化,则返回 true)

// 数值
isNaN('') // false
isNaN('1') // false
isNaN(null) // false
isNaN(true) // false

// 非数值
isNaN('blue') // true
isNaN(NaN) // true
isNaN(undefined) // true

数值转化

Number()用于任何数据类型的转化

  • Boolean 类型,true 转化为 1,0 转化为 false
  • Number 类型,简单的传入和传出
  • null,返回 0
  • undefined,返回 NaN
  • Stirng
    • 只包含数字转化为对应的整数或浮点数
    • 空字符串返回 0
    • 其他类型返回 NaN
  • Object 调用 valueOf()然后依据前面的规则返回值,如果结果是 NaN,调用 toString()方法,依照前面规则转换返回的值
Number("Hello World") // NaN
Number("123") // 123
Number(false) // 0
Number(null) // 0
Number(undefined) // NaN
Number(1.1) // 1.1

parseInt 和 parseFloat 用于将字符串转化为数值

parseInt("1234blue") // 1234
parseInt(22.5) // 22
parseInt("") // NaN
parseFloat("1234blue") // 1234
parseFloat(22.5) // 22.5
parseFloat("") // NaN

String

声明(单引号''或双引号""都可以)

var firstName = 'Nicholas';
var lastName = "Zakas";

特殊字符字面量

字面量 含义
\n 换行
\t 制表
\b 退格
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 十六进制码 nn 表示一个字符(n[0~F]),如\x41 表示 A
\unnn 十六进制码 nnnn 表示一个 Unicode 字符(n[0~F]),如\u03a3 表示 Σ

字符串长度

var text = 'Hello World';
console.log(text.length); // 11

字符串的特点

字符串一旦创建,它们的值就不可改变。

var lang = 'Java'
lang = lang + 'Script'
image

原始值
存储在栈(stack)中的简单数据段,也就是说,它们的值直接存储在变量访问的位置。
引用值
存储在堆(heap)中的对象,也就是说,存储在变量处的值是一个指针(point),指向存储对象的内存处。

基本类型的值不可改变,上面代码中的变量 lang 只是重新指向了存储值为“JavaScript”的地方。这也是很多低版本浏览器拼接字符串速度很慢的原因。

转换为字符串

toString()

字符串、数值、布尔和对象都可以使用 toString() 转化为 String,null 和 undefined 没有这个方法

var str = "String",
  num = 2,
  flag = true,
  obj = { a: 1 };
str.toString(); // "String"
num.toString(); // "2"
flag.toString(); // "true"
obj.toString(); // "[object Object]"

toString 传参转化为不同进制的 Number

var num = 10
console.log(num.toString(10)) // "10"
console.log(num.toString(2)) // "1010"
console.log(num.toString(8)) // "12"
console.log(num.toString(16)) // "a"
String()

String 可以转化任意类型的值为 String,转化规则如下

  1. 如果转化值有 toString 方法,则调用该方法返回相同的结果
  2. 如果值是 null,则返回"null"
  3. 如果值是 undefined,则返回"undefined"
var str = "String",
  num = 2,
  flag = true,
  obj = { a: 1 };
String(str) // "String"
String(num); // "2"
String(flag); // "true"
String(obj); // "[object Object]"

String(null) // "null"
String(undefined) // "undefined"
待转化值+''
2 + '' // "2"
true +'' // "true"
'abc' + '' // "abc"
null + '' // "null"
undefined + '' // "undefined"
var a = {a : 1}
a + '' // "[object Object]"

Object

对象其实就是数据和功能的集合,Object 类型是所有实例的基础,Object 具有的属性和方法也存在于更具体的对象中。

创建对象
var o = new Object()

Object 实例具有的属性和方法

  • constructor: ƒ Object()
    用于创造该对象的函数

  • hasOwnProperty: ƒ hasOwnProperty()
    用于检查给定的属性在当前对象实例中是否存在(非实例的原型中),如 o.hasOwnProperty('name')

      function Person(name){
          this.name = name
      }
      Person.prototype.age = 24
      var p = new Person('liuchang')
      p.name // "liuchang"
      p.age // 24
      p.hasOwnProperty('name') // true
      p.hasOwnProperty('age') // false
    
  • isPrototypeOf: ƒ isPrototypeOf()
    用于检查传入的对象是否是当前对象的原型

      Object.prototype.isPrototypeOf(p) // true
      Person.prototype.isPrototypeOf(p) // true
    
  • propertyIsEnumerable: ƒ propertyIsEnumerable()
    用于检查给定的属性是否能够使用 for-in 语句来枚举

      p.propertyIsEnumerable('name') // true
      p.propertyIsEnumerable('age') // false
    
  • toLocaleString: ƒ toLocaleString()
    返回对象的字符串表示,该字符串执行与执行环境地区对应。

  • toString: ƒ toString()
    返回对象的字符串表示

  • valueOf: ƒ valueOf()
    返回对象的字符串、数值或布尔值表示

      p.valueOf() // {name: "liuchang"}
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容