JavaScript的数据类型和变量

数据类型

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在JavaScript中定义了以下几种数据类型:

Number

JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型:

  • 12 // 整数
  • 3.14 // 浮点数
  • 1.1e3 // 科学计数法 1.1 x 1000
  • -12 // 负数
  • NaN // 表示Not a Number,无法计算结果时候使用
  • Infinity // 无限大

字符串

字符串是以单引号'或双引号"括起来的任意文本

布尔值

用true、false表示布尔值,也可以通过布尔运算计算出来:

  • true; // 这是一个true值
  • false; // 这是一个false值
  • 2 > 1; // 这是一个true值
  • 2 >= 3; // 这是一个false值

数组

数组是一组按顺序排列的集合,集合的每个值称为元素。JavaScript的数组可以包括任意数据类型。例如:

var arr = [1, 2, 3.14, 'Hello', null, true];

数组用[]表示,元素之间用,分隔。数组的元素可以通过索引来访问。请注意,索引的起始值为0.

arr[0]; // 返回索引为0的元素,即1

对象

JavaScript的对象是一组由键-值组成的无序集合,例如:

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

要获取一个对象的属性,我们用对象变量.属性名的方式:

person.name; // 'Bob'

null和 undefined

null表示一个“空”的值,它和0以及空字符串''不同,0是一个数值,''表示长度为0的字符串,而null表示“空”。JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义。事实证明,这并没有什么卵用,区分两者的意义不大。大多数情况下,我们都应该用null。undefined仅仅在判断函数参数是否传递的情况下有用。

比较运算符

  • 当我们对Number做比较时,可以通过比较运算符得到一个布尔值

  • ==比较,它会自动转换数据类型再比较,很多时候,会得到非常诡异的结果

  • ===比较,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较

  • 唯一能判断NaN的方法是通过isNaN()函数

  • 最后要注意浮点数的相等比较: 

    1 / 3 === (1 - 2 / 3); // false

    这不是JavaScript的设计缺陷。浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数。要比较两个 浮点数是否相等,只能计算它们之差的绝对值,看是否小于某个阈值:

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

变量

变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据 类型。 变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$和_的组合,且不能用数字开头。变量名也 不能是JavaScript的关键字,如if、while等。

申明一个变量用var语句,比如:

var a; // 申明了变量a,此时a的值为undefined

strict模式

javaScript在设计之初,为了方便初学者学习,并不强制要求用var申明变量。这个设计错误带来了严重的后果:如果一个变量没有通过var申明就被使用,那么该变量就自动被申明为全局变量.在同一个页面的不同的JavaScript文件中,如果都不用var申明,恰好都使用了变量i,将造成变量i互相影响,产生难以 调试的错误结果。 使用var申明的变量则不是全局变量,它的范围被限制在该变量被申明的函数体内(函数的概念将稍后讲解),同名变 量在不同的函数体内互不冲突。

为了修补JavaScript这一严重设计缺陷,ECMA在后续规范中推出了strict模式,在strict模式下运行的JavaScript代码,强制 通过var申明变量,未使用var申明变量就使用的,将导致运行错误。

启用strict模式的方法是在JavaScript代码的第一行写上: 'use strict';

posted @ 2019-09-16 11:39  YaoSir66  阅读(254)  评论(0编辑  收藏  举报