第03章 - 基本概念

本章要点总结

<p>

六种基本数据类型
名称 说明
Undefinede 未定义类型
Null 空类型
Boolean 布尔类型
Number 数字类型
String 字符串类型
Object 对象类型
数据类型相关操作符和关键字
名称 说明
typeof 返回六种基本类型中的五种(其中 Null 返回 "object"),另外函数类型返回 "function"
null 空指针,typeof 值为 "object",一般用来初始化对象
undefined 未初始化的变量和未声明的变量会返回这个值
typeof 返回值
类型 返回值
Undefinede "undefined"
Null "object"
Boolean "boolean"
Number "number"
String "string"
Object "object"
Function "function"
数值相关属性和方法
名称 说明
Number.MIN_VALUE 最大值
Number.MAX_VALUE 最小值
Infinity 无穷大
NaN 非数
isFinite(n) 判断一个值是不是无穷大
isNaN(NaN) 判断一个值是不是非数
字符串转换为数值
名称 说明
Number(value) 尽可能的转换,可以转换布尔类型,和字符串类型
parseInt(value) 从第一个字符向后扫描连续的整数。第二个参数可以设置整数的进制
parseFloat(value) parseInt(value) 类似,只认第一个小数点
任意类型转换为布尔类型
名称 说明
Boolean(value) 将其他类型的值转换成 Boolean 值,所有类型都可以转换
真值表
类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 非零值 0NaN
Object 任何对象 null
Undefined n/a undefined
转换为字符串
名称 说明
obj.toString() 返回的对象的字符串表示;数值对象可以传入一个基数;NullUndefined 对象没有这个方法;
String(value) 更通用一点,可以转换 NullUndefined 类型

<p>

<p>

3.1 语法

3.1.1 区分大小写

3.1.2 标示符

3.1.3 注释

3.1.4 严格模式

在严格模式下,Javascript 引擎会有不同的行为。

在整个脚本中引入严格模式如下:

"user strict"

在函数体内引入严格模式如下:

function doSomething(){
    "use strict";
    //function body
}

3.1.5 语句

  • 不要省略分号
  • 能用花括号的地方都应该用

3.2 关键字和保留字

3.3 变量

  • 变量不保持类型
  • var 定义的变量是局部变量;没有 var 直接定义的变量是全局变量
  • 一条语句中可以定义多个变量
var message = "hi",
    found = false,
    age = 29;

3.4 数据类型

Javascript 有六种数据类型

  • Undefinede
  • Null
  • Boolean
  • Number
  • String
  • Object

3.4.1 typeof 操作符

typeof 返回上面六种类型中的五种(其中 Null 返回"object"),另外加上函数类型

  • 如果未定义则返回 "undefined"
  • 如果是布尔值则返回 "boolean"
  • 如果是字符串则返回 "string"
  • 如果是数字则返回 "number"
  • 如果是对象则返回 "object"
  • 如果是函数则返回 "function"

再次强调 typeof null == "object"

3.4.2 Undefined 类型

  • Undefined 类型只有一个值就是 undefined
  • 声明了但是未初始化的变量的值是 undefined
  • 未声明的变量的值也是 undefined

3.4.3 Null 类型

  • null 作为空指针用来初始化对象
  • nulltypeof 值为 "object"
  • <font color=blue>undefined 派生自 nullnull == undefined 返回 true</font>

3.4.4 Boolean 类型

使用 Boolean 函数,所有其他类型都可以转换为 Boolean 类型,下面是真值表:

类型 转换为 true 的值 转换为 false 的值
Boolean true false
String 任何非空字符串 ""(空字符串)
Number 非零值 0NaN
Object 任何对象 null
Undefined n/a undefined

3.4.5 Number 类型

不同进制的字面量

  • 十进制 33
  • 八进制 067
  • 十六进制 0x3a

1. 浮点数

可以被转换成整数的浮点数总是会被转换,如

> 1.0
1

可以用科学计数法表示浮点数,小数点后面超过6个零的数会用科学计数法表示


> 3.21e6
3210000

> 0.0000000000153
1.53e-11

> 15300000000000
15300000000000

需要注意的是,浮点数并不精确

> 0.1 + 0.2
0.30000000000000004

2 数值范围

  • 最小值可以用 Number.MIN_VALUE 表示,值为 5e-324
  • 最大值可以用 Number.MAX_VALUE 表示,值为 1.7976931348623157e+308
  • 超过最大值返回 Infinity 即正无穷,小于最小数返回 -Infinity 即负无穷
  • 使用 isFinite() 函数可以判断一个变量是不是无穷大
> Number.MIN_VALUE
5e-324

> Number.MAX_VALUE
1.7976931348623157e+308

> Number.MAX_VALUE + Number.MAX_VALUE
Infinity

> -1 / 0
-Infinity

> isFinite(Number.MAX_VALUE + Number.MAX_VALUE)
false

3. NaN

  • 任何数除以 0 都返回 NaN
  • 任何涉及到 NaN 的操作都返回 NaN
  • NaN 不和任何值相等,包括他自己
> 10/0
Infinity

> NaN/10
NaN

> NaN == NaN
false

函数 isNaN 可以判断一个值是否是 NaN。注意:有些值可以被转换为数值,因此不会返回 NaN

> isNaN(NaN)
true

> isNaN("blue")
true

> isNaN(10)
false

> isNaN("10")
false

> isNaN(true)
false
> 

4. 数值转换

有三个转换数值的函数,分别是

  • Number()
  • parseInt()
  • parseFloat()

Number 会尽可能的将值转换为数值,只要能转换的都转换,甚至可以部分转换

> Number("hello")
NaN

> Number("")
0

> Number(true)
1

> Number(false)
0
> Number("12.345")
12.345

> Number("0xff")
255

praseInt 只解析看到的数字部分,其他一律不解析

> parseInt("Hello")
NaN

> parseInt("")
NaN

> parseInt(true)
NaN

> parseInt(false)
NaN

> parseInt("32.67abcd")
32

> parseInt("0xff")
255

parseInt 函数可以指定转换的进制,ECMAScript 5 引擎下,0 前导的字符串不会被认为是八进制数,可之前的版本不一样,因此使用这个函数最好都指定转换进制。

> parseInt("010")
10

> parseInt("010",2)
2

> parseInt("010",8)
8

> parseInt("010",16)
16

parseFloatparseInt 有类似的情况,同时小数点只认第一个

> parseFloat("0023.56.789.ase")
23.56

3.4.6 String 类型

单引号双引号都可以表示字符串

1. 转义符

字面量 含义
\n 换行
\t 制表符
\b 空格
\r 回车
\f 进纸
\\ 斜杠
\' 单引号
\" 双引号
\xnn 以十六进制表示一个字符
\unnnn 以十六进制表示一个 Unicode 字符

2. 字符串不可变

字符串是一种不可变对象,一旦创建就只能读取不能修改,这一点在各个语言中都一样

3. 转换为字符串

toString() 函数将其它类型的值转换为字符串

  • 数值、字符串、布尔和对象都有 toString() 方法,但是 NullUndefined 没有
  • 在数值上调用这个方法的时候,还可以传入一个基数
var age = 11;
var ageAsString = age.toString(); //the string "11"
var found = true;
var foundAsString = found.toString(); //the string "true"

var num = 10;
alert(num.toString()); //"10"
alert(num.toString(2)); //"1010"
alert(num.toString(8)); //"12"
alert(num.toString(10)); //"10"
alert(num.toString(16)); //"a"

String() 函数更通用一点,可以将 NullUndefined 显示出来

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;
alert(String(value1)); //"10"
alert(String(value2)); //"true"
alert(String(value3)); //"null"
alert(String(value4)); //"undefined"

3.4.7 Object 类型

Object 是所有对象的基类,创建一个对象的方法:

var o = new Object();

所有对象都继承了以下方法和属性:

  • constructor:保存着构造函数
  • hasOwnproperty(propertyName):用来查询属性是否存在
  • isPrototypeOf(obj):是否是某个对象的原型
  • propertyIsEnumerable(propertyName):某个属性是否可枚举
  • toLocaleString():返回与环境对应的对象字符串
  • toString():返回对象字符串
  • valueOf():返回对象的字符串、数值或者布尔表示

3.5 操作符

3.5.1 一元操作符

3.5.2 一元赋值操作符

把一元操作符应用到非数值类型时,首先会尽量将其转换为数值,如果不能转换则返回 NaN

var s1 = "2";
var s2 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function() {
        return -1;
    }
};

s1++; //value becomes numeric 3
s2++; //value becomes NaN
b++; //value becomes numeric 1
f--; //value becomes 0.10000000000000009 (due to floating-point inaccuracies)
o--; //value becomes numeric -2
var s1 = "01";
var s2 = "1.1";
var s3 = "z";
var b = false;
var f = 1.1;
var o = {
    valueOf: function() {
        return -1;
    }
};

s1 = -s1; //value becomes numeric -1
s2 = -s2; //value becomes numeric -1.1
s3 = -s3; //value becomes NaN
b = -b; //value becomes numeric 0
f = -f; //change to -1.1
o = -o; //value becomes numeric 1

3.5.2 位操作符

负数:操作数的绝对值求反,然后加 1

求反:正好是求负数的逆过程,变成负数然后减 1 即可

3.5.3 布尔操作符

根据前面 3.4.3 的真值表进行操作

Javascript 的布尔操作也有短路

3.5.4 乘性操作符

3.5.5 加性操作符

3.5.6 关系操作符

注意:不同类型的数据也可以比较,使用时应该查看手册

3.5.7 相等操作符

注意:不同类型的数据也可以比较,使用时应该查看手册

3.5.8 三元操作符

var max = (num1 > num2) ? num1 : num2;

3.5.9 赋值操作符

3.5.10 逗号操作符

在一条语句中执行多个赋值

var num1=1, num2=2, num3=3;

3.6 语句

  • if 语句
  • do-while 语句
  • while 语句
  • for 语句
  • for-in 语句
  • label 语句
  • breakcontinue 语句
  • with 语句
  • switch 语句

3.7 函数

3.7.1 函数的参数

函数的参数本质上就是一个叫做 arguments 的数组

function sayHi() {
    alert("Hello " + arguments[0] + ", " + arguments[1]);
}

3.7.2 没有重载

Javascript 中函数没有重载,可以通过检测函数参数的不同数量,实现不同的功能

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

推荐阅读更多精彩内容

  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,790评论 0 1
  • 本章内容 语法 数据类型 流控制语句 理解函数 3.1 语法 3.1.1 区分大小写 区分大小写 3.1.2 标识...
    闷油瓶小张阅读 717评论 0 0
  • 线代~!头晕,没事,这才看多大会啊,俩小时弄懂人家学了那么久的东西,怎会那么容易呢,淡定~~加油
    星尘下的猫咪阅读 302评论 0 0
  • 照片的后期大部分都是通过电脑ps,有了手机app的照片修图软件,动动手指轻松搞定。 1 手机app:PicsArt...
    少白兄阅读 7,405评论 5 17
  • 冰J冰阅读 245评论 0 0