原始类型(基础数据类型) 引用数据类型(对象类型)
boolean 布尔 true false undefined,null,0(包括+0,-0),NaN,false 使用Boolen( )为false
Undefined类型: 表示找不到,未定义 只有一个值undefined
Null类型 : null 表示一个空的值 只有一个值null 有的人设变量时,会把null当做默认值或初始值,避免值为undefind
Number类型 数字类型:
NaN NaN不是数据类型,是一个特殊值 特性: NaN不等于自身 例如: console.log( NaN===NaN); 返回false
正无穷 Infinity 最大值:Number.MAX_VALUE
负无穷 -Infinity 最小值:Number.MIN_VALUE
正常数字 123等
指数 长度为11个二进制位,意味着指数部分最大值为2047
数字的部分特性:
1.js内部,所有数字都是以64位浮点形式储存,即便整数也是如此。js底层没有整数,只有小数,所以运算不够精确。
例如: consloe.log((3.1+3.2)>6.3); 返回值是true
2.无限接近0 则显示0
当一个值特别接近0,超过一个界限时,会直接显示0 所以,js中很少用其进行精确运算,很少做大型数据运算。
例如:
var x=0.5; for(var i=0;i<25;i++){ x=x*x; } console.log(x); //0特殊值: +0 -0 运算出现的结果会不同: 5/0 结果:Infinity 因为0不能作为被除数 5/-0 结果:-Infinity 50 结果:0 5-0 结果:-0
String类型 (字符串): 简单的说,由单引号和双引号包裹的内容,就是字符串
\ 转义字符 能屏蔽字符本身的含义 代码一行写不下,可以用转义字符
var str="1234\ 2345";正常情况下,字符串写不下不能直接用回车键换行 换行的话,\n换行符要在一行中
另一种写法: 字符串拼接:
var a="123"+ "234"+ "123";Symbol (es6新类型): 一种独一无二的字符串,永远不会产生重复现象。 主要针对对象中的key。不能使用new关键字的构造函数运行。 可以在symbol中传入一段参数,用来对这个独一无二的数据起到一个说明的作用。
作用: 避免命名重复,造成程序出错
出错例子:
let obj={ "name":"123", "name":"wan" }运行时,不会报错。后面的key把前面的key给覆盖。打印结果:只会显示后一个键值对,前一个消失。
注意事项: 不能用obj.symbol方式 只能用obj[symbol]
强型转换: let a=Symbol(); String(a); Bollean(a);
特性例子:
let a=Symbol(); let b=Symbol(); console.log(a===b); //false因为独一无二
object 对象: { } 无序的键值对的集合 创建一个对象需要{ }来创建 写法:
{name:"a"}创建对象的常用方法:
1.var obj={ }; 2.var obj={name:"a"}; 3.构造函数创建 var obj=new String( );//创建一个字符串对象特性: {name:“a”}与{“name”:“a”}相同,对象的键都会自动转为string类型 键[ ]中不加引号也会被认为是变量 键不能为数字开头的纯数字 对象与对象间的存储空间是不同的 例如: console.log({} === {}) 返回false
Aarry 数组: 是一种特殊的对象。
创建数组:
var arr=[ ] var arr=[123,"qqq"] var arr=new Array() var arr=new Array("123","wa")从创建速度还是运行效率来讲,直接量的形式都优于构造函数的形式
创建的区别: 构造函数创建过程: 1.创建函数 2.查询作用域链 3.创建作用域链 4.将数据写入
使用直接量创建: 步骤为3步 使用直接量创建,相当于将数据直接写入内存中,速度最快。相当于直接作用在作用域链条内。
作用域链条: 在ES5中存在两条,一条是var,也就是变量的作用域,另一条是函数声明。
特性: 在代码的执行过程中优先查找非函数链条。顺序是从上到下。而函数链条顺序从下到上。
js代码执行时,通过直接量向内存中存储数据的速度是最快的,其次是变量声明,最后是通过函数调用获得的变量。
数组可自定义下标,但自定义下标后,数组length为0。因为是自定义数组,在执行某些操作时,数组排列会出现混乱。
稀疏数组: undefined占位(空位),这种索引不连贯的数组,叫做稀疏数组。 例如:
var arr=[1,2," ","w", ,5,9];"w"后面为空位, 索引不连贯
Function 函数(方法):
函数(function)是一段可以反复调用的代码块,需要通过名字来进行调用。它能将一些数据(函数的参数)传递进去进行处理,然后返回一些数据(函数的返回值),也可以不返回数据。
方法(method)是通过对象调用的javascript函数。也就是说,方法也是函数,只是比较特殊的函数。
也就是函数和方法本质上是一样的,只不过方法是函数的特例,是将函数赋值给了对象。
js中所有的方法都以返回值的形式返回结果
函数创建: function 函数名(){ } var 函数名=function( ){ }; 匿名函数/函数表达式 var 函数名=new Function( ) ; 构造函数 var 函数名=(形参)=>{ } 箭头函数(ES6/ESMA2015) 箭头函数简写: var 函数名=参数=>返回值 当参数只有一个时可省略() 当函数体中只有一句返回值时,可省略{ }
构造函数: 功能强大,效率低,速度慢,能创建一切类型,不建议使用创建对象以外其他类型
参数: 函数的参数不是必须的
形参: 定义函数时需要传入参数 实参: 实际调用函数时传入的参数
特性: 实际调用时参数可与设置时的参数个数不等 函数调用时,可省略最后,不用可传空字符串,但不能在中间省略
例如:
fn(num,,1)//报错作用: 减少代码的复用性 避免造成变量污染
特性: 一等公民 与string,number等同级。能代替一切进行赋值 函数重复声明,后一个会把之前的覆盖掉 函数都有一个constructor属性,可查看每个对象的构造函数 函数没调用,函数代码体不执行 函数不执行的话,函数内部如果代码书写错误,代码运行也不会报错 函数如果没有返回值,打印( consloe.log( ) )的值为undeifined ()叫做方法也叫API,但并不是所用的方法都叫API
增加代码安全性的方法: 代码压缩 变量混淆
Date 日期类型
Math 数学类型
RegExp 正则表达式
原始类型的数据信息都存储于栈(stack)中,引用类型信息存于堆(heep)中。
引用类型的存储都是拆开的,数据信息存储于堆中,存储于堆中的位置信息存于变量中,变量存储与栈中。
引用类型可以修改单个值,但原始类型只能整个替换。
如果把引用类型的地址赋值给变量,修改变量,只是修改地址,并不会对值造成影响。
寻找顺序: 到栈中找到存储地址的变量,再用该地址去堆中寻找相应的数据 栈中->变量->堆中->数据
