0x03数据类型和变量

数据类型

Number

JS不区分整数和浮点数,统一用Number。

123; // 整数123
0.456; // 浮点数0.456
1.2345e3; // 科学计数法表示1.2345x1000,等同于1234.5
-99; // 负数
NaN; // NaN表示Not a Number,当无法计算结果时用NaN表示
Infinity; // Infinity表示无限大,当数值超过了JavaScript的Number所能表示的最大值时,就表示为Infinity

Number可以直接做四则运算,规则和数学一致。

字符串

字符串是python风格的。单引号括起来和双引号括起来均可。

布尔值

true和false。 包括逻辑运算符也与C风格的完全一致。&&、||、!

比较运算符

其他等同C语言。但是在比较是否相等时要好好说道说道。
JS有两种相等运算符,一种是==,一种是===
==会自动转换数据类型再进行比较,所以可能会得到奇奇怪怪的结果。
===不会自动转换类型,如果类型不同,直接返回false.
这是个JS设计的缺陷,我们要始终用===进行比较。

运用相等运算符时有个例外。NaN这个特殊的Number值,竟然与NaN不相等。
判断是否是NaN只能用isNaN(NaN);这个函数。它会返回true指示这是个NaN。

最后我们要特别注意浮点数相等的比较。
(1/3) === (1-2/3)会返回false.因为浮点数在计算过程中会有误差。
要比较两个浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

Math.abs(1 / 3 - (1 - 2 / 3)) < 0.0000001; // true

null和undefined

null表示值为空,undefined表示值未定义。并没有什么卵用。undefined仅仅在判断函数参数是否传递的情况下有用。没传递自然是未定义了。

数组

js的数组和python的list类似,不要求元素类型相等。
以下是一个合法的js数组。

[1, 2, 3.14, 'Hello', null, true];

还可以用Array函数创建数组,但是可读性很差劲。

new Array(1, 2, 3); // 创建了数组[1, 2, 3]

对象

JS的对象类似于python的字典:

var person = {
    name: 'Bob',
    age: 20,
    tags: ['js', 'web', 'mobile'],
    city: 'Beijing',
    hasCar: true,
    zipcode: null
};

是键值对的无序集合。
JavaScript对象的键都是字符串类型(无需用引号包裹,自动就是字符串),值可以是任意数据类型。上述person对象一共定义了6个键值对,其中每个键又称为对象的属性。
要获取一个对象的属性,我们用对象变量.属性名的方式:

person.name; // 'Bob'
person.zipcode; // null

变量

命名规则同Java语言一样。
字母、数字、下划线、$符号组成,数字不打头。
申明一个变量用var语句。
在JavaScript中,使用等号=对变量进行赋值。可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var申明一次:

var a = 123; // a的值是整数123
a = 'ABC'; // a变为字符串

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
和静态语言相比,动态语言更灵活,就是这个原因。
要显示变量的内容,可以用console.log(x),打开Chrome的控制台就可以看到结果。
MAC-Chrome打开控制台:option+command+I(i)
使用console.log()代替alert()的好处是可以避免弹出烦人的对话框。但是其实效果都是差不多的。

strict模式

JS的设计缺陷:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量:

i = 10; // i现在是全局变量

怎么启动strict模式?
在JavaScript代码的第一行写上:

'use strict';

这是一个字符串,不支持strict模式的浏览器会把它当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式运行JavaScript。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值