JavaScript基础02-变量及数据类型

变量

变量是用于存放数据的容器。我们通过「变量名」获取数据,甚至可以修改数据。

变量还可以用来保存字面量。变量的本质其实是程序在内存中申请的一块用来存放数据的空间。

什么是变量

变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据

为什么要使用变量

使用变量可以方便的获取或者修改内存中的数据

如何使用变量

js中使用var声明变量

var name;

变量赋值:

var name;
name = "zhudzhi";

同时声明多个变量

var name, sex,age;
name = "zhudzhi";

同时声明多个变量并赋值

var name = zhudzhi ,age = 27;

声明一个变量,并赋值,我们撑起为变量的初始化

注意ES6之后,可以使用const,let关键字来声明一个变量。

const name;
let age;

var,const和let声明变量的区别

  1. var定义的变量会预解析,简单的说就是如果变量没有定义就直接使用的话,JavaScript回去解析这个变量,代码不会报错,只会输出undefined
  2. var定义的变量可以反复去定义,当然后面的会覆盖前面的
  3. let定义的变量不会预解析,必须先声明再使用,否则会报错
  4. let不能定义已经定义过的变量(无论之前是用var定义的还是let或者const定义的
  5. let是块级作用域,函数内部使用let定义后,对函数外部无影响,简单说就是在一个{}里面生效
  6. const定义的变量不会预解析,必须先声明再使用,否则会报错
  7. const定义的变量不允许修改,所以,const用来定义常量。
    所以我们使用const声明常量的好处,一是阅读代码的人立刻会意识到不应该修改这个值,二是防止了无意间修改变量值所导致的错误,另外其实js编译器也对const进行了优化,可以提高代码的执行效率;另外let声明的变量没有预编译和变量升级的问题,先声明再使用其实更为规范,而let本身是一个块级作用域,很多时候我们在写代码的时候都希望变量在某个代码块内生效,也更为方便。

变量命名规则和规范

规则 - 必须遵守的,不遵守会报错

  1. 由字母、数字、下划线、$符号组成,不能以数字开头
  2. 不能是关键字和保留字,例如:for、while。
  3. 区分大小写
    规范 - 建议遵守的,不遵守不会报错
  4. 变量名必须有意义
  5. 遵守驼峰命名法。首字母小写,后面单词的首字母需要大写。例如:userName、userPassword

数据类型

在计算机中,不同的数据所需占用的存储空间不同,为了充分利用存储空间,于是定义了不同的数据类型。而且,不同的数据类型,寓意也不同。
我们都知道,无论这个变量是字符串类型,还是数字类型,我们都可以直接用 var 去定义它,因为:JavaScript 是一种「弱类型语言」,或者说是一种「动态语言」,这意味着不需要提前声明变量的类型,在程序运行过程中,类型会自动被确定。JS 的变量数据类型,是在程序运行的过程中,根据等号右边的值来确定的.

js中的数据类型

  1. 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。
  2. 引用数据类型(引用类型):Object 对象。
    说明,js中引用数据类型只有object类型。而函数,对象属于object。

数据类型之间最大的区别

  1. 基本数据类型:参数赋值的时候,传数值。
  2. 引用数据类型:参数赋值的时候,传地址(修改的同一片内存空间)。所以,String在某种意义上也属于引用数据类型,只是在使用上类似于基本数据类型。
  3. 基本数据类型的值,直接保存在栈内存中。值与值之间是独立存在,修改一个变量不会影响其他的变量。
  4. 对象是保存到堆内存中的。每创建一个新的对象,就会在堆内存中开辟出一个新的空间;而变量保存了对象的内存地址(对象的引用),保存在栈内存当中。如果两个变量保存了同一个对象的引用,当一个通过一个变量修改属性时,另一个也会受到影响。
  5. typeof,可以用来判断变量的类型
typeof 变量名
//或者
typeof(变量名);
typeof 返回结果
typeof 数字 number
typeof 字符串 string
typeof 布尔型 boolean
typeof 对象 object
typeof 方法 function
typeof null object
typeof undefined undefined

String类型

字符串型可以是引号中的任意文本,其语法为:双引号 "" 或者单引号 ''。,换言之,用引号声明的变量就是String类型的。

需要注意的是,同类引号不能嵌套:双引号里不能再放双引号,单引号里不能再放单引号。而单引号里可以嵌套双引号;双引号里可以嵌套单引号。

转义字符
在字符串中我们可以使用\作为转义字符,当表示一些特殊符号时可以使用\进行转义。
常见的转义字符如下,

常见的转义字符

字符串长度

string类型有length属性,一个字符算一个字符串长度(一个英文字符,一个中文字符,一个空格都算一个字符。)


字符串长度

字符串拼接

字符串拼接使用 + 连接

console.log(11 + 11);
console.log('hello' + ' world');
console.log('100' + '100');
console.log('11' + 11);
console.log('male:' + true);
  1. 两边只要有一个是字符串,那么+就是字符串拼接功能
  2. 两边如果都是数字,那么就是算术功能。
  3. 字符串具有不可变性,字符串里面的值不可被改变。对string重新赋值,其实是改变了引用,老的字符串不会被修改,依旧会保存在内存中。
  4. 在ES6中拼接字符串,可以使用模板字符串

模板字符串
使用反引号(``)代替普通的单引号或双引号。
使用${expression}作为占位符,可以传入变量。

let str = 'hello world';
let newStr = `你好,${str}`; //输出:你好,hello world

并且,模板字符串是支持换行的,不必转义,反引号中是什么就直接在页面显示什么。

模板字符串中插入函数的返回值

模板字符串

Number类型

在JS中所有的数值都是 Number 类型,包括整数和浮点数(小数)

浮点数精度问题
浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数,所以,我们不应该取判断两个浮点数是否相等。
数值范围

由于内存的限制,ECMAScript 并不能保存世界上所有的数值。

  1. 最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
  2. 最小值:Number.MIN_VALUE,这个值为: 5e-324
  3. 如果使用 Number 表示的变量超过了最大值,则会返回Infinity。无穷大(正无穷):Infinity
  4. 无穷小(负无穷):-Infinity
    注意:typeof Infinity的返回结果是number。任何数据类型typeof都是 number

数值判断
是一个特殊的数字,表示Not a Number,非数值。

NaN

注意,NaN 与任何值都不相等,包括 NaN 本身。
判断一个变量是不是数值,可以使用isNaN来判断

isNaN(value);
//value :要被测的值,如果给定值为NaN,则返回值为`true`;否则为`false`。

Boolean类型

  1. Boolean字面量: true和false,区分大小写
  2. 计算机内部存储:true为1,false为0
    要用来做逻辑判断: true 表示真,false 表示假。布尔值直接使用就可以了,千万不要加上引号,加了引号就变成了一个字符串。

Undefined

使用 typeof 检查一个 undefined 值时,会返回 undefined。

  1. undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined
  2. 如果你从未声明一个变量,就去使用它,则会报错(这个大家都知道);此时,如果用 typeof 检查这个变量时,会返回 undefined。
  3. 如果一个函数没有返回值,那么,这个函数的返回值就是 undefined。或者,也可以这样理解:在定义一个函数时,如果末尾没有 return 语句,那么,其实就是 return undefined。

null

null 专门用来定义一个空对象(例如:let a = null)。

如果你想定义一个变量用来保存引用类型,但是还没想好放什么内容,这个时候,可以在初始化时将其设置为 null。null表示一个空,变量的值如果想为null,必须手动设置。

  1. Null 类型的值只有一个,就是 null。比如 let a = null。
  2. 使用 typeof 检查一个 null 值时,会返回 object。

null 和 undefined 有很大的相似性。看看 null == undefined 的结果为 true 也更加能说明这点。但是 null === undefined 的结果是 false。它们虽然相似,但还是有区别的。比如,任何数据类型和 undefined 运算都是 NaN; 任何值和 null 运算,都是这个数本身,null 可看做 0 运算

你可能感兴趣的:(JavaScript基础02-变量及数据类型)