1. 6种-基本数据类型:
⑴ 数值类型 Number
数值类型分为:
1.正负整数 : 100;
2. 浮点数 : 1.23;
3. 科学计数法 :1.23e-2 相当于 1.23 * 10^-2;
4. 无穷大/无穷小 :Infinity / -Infinity;
5. 特殊的数值类型 :NaN ,注意点如下;
⑴ NaN 与任何 Number数据类型 做算术运算都得 NaN(包括其本身);
⑵ NaN 与任何数值皆不相等,包括 NaN == NaN,返回 false;
拓展:
获取最大值 :Number.MAX_VALUE 约等于(根据浏览器的不同)1.7976931348623157e+308;
获取最小值 :Number.MIN_VALUE 约等于(根据浏览器的不同) 5e-324
虽然数字是无穷的,但计算机的内存是有穷尽的,所以 JS 具有最大/最小值,若给最大值 * 10,会得到 Infinity。
(2)字符串类型 String
JS 中,表达字符串类型有两种方法:
1. 使用一对单引号(英文符号),将数据包裹起来 :‘abc’;
2. 使用一对双引号(英文符号),将数据包裹起来 :"abc";
知识点:
1. 一般习惯上使用单引号,且同一份代码文件,建议统一使用单引号 / 双引号作为字符串的开始;
2.单双引号可以成对的互相嵌套: " '' " / ' "" ',不可以混合嵌套 :' " ' ",JS 在执行代码时,会把第一个遇到的单引号/双引号作为字符串的开始,于是根据该引号,寻求下一个引号作为结束,所以在单引号 / 双引号的嵌套中,第二个出现的双引号 / 单引号会被认为是字符串的一部分进行解析;
3. 若一个字符串内,既包含单引号,又包含双引号,可以使用转义符(反斜杠:\)来解决问题,JS 代码在解析字符串时,会把转义符后面的第一个符号解析为字符串的一部分 :单引号 \' ;双引号 \"
⑶ 布尔类型 Boolean
布尔类型只有两个值,常用于条件判断语句:
1. true 代表 真;
2. false 代表 假;
⑷ 特殊基本数据类型 Null
Null 只有唯一的一个值为 null;
1. 代表空,用typeof 判断数据类型的时候,会返回 object
2. 一般常见于DOM操作,获取不到数据的时候,会返回 null,例如:页面若不存在div标签,却使用 document.querySelector('div') 去获取div元素节点的时候,返回 null
3. 一般在声明变量时,若变量值不确定,即可能由代码在后面动态赋值,而当前需要提前声明而导致无法赋值时,建议使用 null作为默认值:var xx = null; 而不是:var xx;
⑸ 特殊基本数据类型 Undefined
Undefined 只有唯一的一个值为 undefined;
1. 代表未定义,常见于 :
(1)声明变量,却未赋值 :var xx;
(2) 获取数组中,超出数组下标的值;
(3)获取对象中未定义的属性 或方法;
简单理解 null 与 undefined 的区别: null是 JS知道自己要获取什么值,但是找不到符合条件的值;undefined 是 JS根本不知道只是一个什么东西;
⑹ 【ES6新增属性】Symbol
最全Javascript数据类型解析 - Alvabill的满满干货 - CSDN博客
2. 2种复杂数据类型
⑴ 数组 Array
数组的三要素 :元素、下标(下标从0开始)、长度(length);
1. 数组多用于存放一组具有 排列顺序的数据,这个数据既可以是 基本数据类型,也可以是复杂数据类型;
2. 数组使用 typeof 检验数据类型是 会得到object,故建议使用其他检验数据类型方法检验(待补充新篇章,数据类型的检验方法);
3. 数组的声明:
(1)var arr = new Array();
var arr = new Array(1,2,3); 创建一个数据内容为1,2,3的数组;
var arr = new Array(3); 创建一个长度为3 的数组;
(2)var arr = Array();
(3)var arr = []; 最常用
var arr = [1,2,3,]; 创建内容为1,2,3的数组,创建数组时,若最后是以一个数据+逗号的形式结尾,逗号不起作用,一般忽略不写;
var arr = [3]; 创建内容为3 的数组;
4. 数组的遍历 :
⑵ 对象 Object
对象分为 Object(对象) 和 Function(函数) 两种 :
Object 对象:
1. Object 是一种以键值对形式存储数据的数据类型,这个数据既可以是 基本数据类型,也可以是复杂数据类型;
2. Object 的声明方法:
(1)var obj = new Object();
(2)var obj = {}; 最常用,推荐
3. 对象的声明并赋值:
4. 对象的 获取、修改与赋值:
5. 对象的遍历 for-in :
Function 函数:
函数中存放的是一段代码
1. 函数的声明:
(1)function fun(形参) { 代码 } 函数的形参可以有默认值: 形参 = 默认值
(2)var fun = function(形参) { 代码 } 使用变量接收 匿名函数
(3)(function() { 代码 })() 一般函数只有被调用才会执行,自执行函数不需要调用就会制动执行。
2. 函数内的两个特殊属性:
(1)arguments 函数内默认用来保存所有实参的一个数组;
(2)this 对象 与 构造函数 常用,这个属性默认指待window本身,但这不是固定的,简单记忆就是,谁点出这个方法(函数),this就指向谁。 默认的函数调用比如: obj() 本质是 window.obj(),window是一个JS中最顶级的对象。 如果声明一个对象,对象中有一个方法,方法中的this 就代表当前这个对象。
3. 基本数据类型 和 复杂数据类型 的区别
存储方式不同
浏览器会在在计算机的内存中,分出多个空间用于缓存数据,其中三个为 : 字符串常量区、栈、堆。
(1)字符串常量区用于储存唯一的(不重复)字符串,当 JS代码需要声明变量存储字符串时,会优先在字符串常量区遍历,看是否存在这个字符串,如存在,直接拷贝一份,并将其跟变量名一起储存于栈中,若不存在,则先生成一个在字符串常量区,再执行拷贝操作。 这一知识点涉及底层仅做了解,它关系到的是字符串的恒定性,与 为什么使用DOM对象.innerHTML 的性能 比不上 document.createElement('标签名"); 等......
(2)我们创建的基本数据类型,数据会和变量名一起储存在 栈中;
(3)我们创建的复杂数据类型,数据会被储存在堆中,而栈中储存的的是变量名和数据在堆中的地址。 之所以这样处理是因为,栈处理数据的速度比堆快,但存储空间比堆小。
影响:不同的储存方式带来的,是数据处理的方式不同: