js基础
1.数据类型
JS组成
ECMAScript——JavaScript语法
DOM——页面文档对象模型
BOM——浏览器对象模型
数据存储单位
大小关系:bit < byte < kb < GB < TB<.....
- 位(bit): 1bit 可以保存一个 0 或者 1 (最小的存储单位)
- 字节(Byte):1B = 8b
- 千字节(KB):1KB = 1024B
- 兆字节(MB):1MB = 1024KB
- 吉字节(GB): 1GB = 1024MB
- 太字节(TB): 1TB = 1024GB
输入输出语句
方法 | 说明 | 归属 |
---|---|---|
alert(msg) | 浏览器弹出警示框 | 浏览器 |
console.log(msg) | 浏览器控制台打印输出信息 | 浏览器 |
prompt(info) | 浏览器弹出输入框,用户可以输入 | 浏览器 |
alert() 主要用来显示消息给用户,console.log() 用来给程序员自己看运行时的消息。
声明变量
// 声明变量
var age; // 声明一个 名称为age 的变量
赋值
age = 10; // 给 age 这个变量赋值为 10
变量的初始化
var age = 18; // 声明变量同时赋值为 18
声明一个变量并赋值, 我们称之为变量的初始化。
数据类型简介
- Nunber 数字型,包含整型和浮点型,在JS中八进制前面加0,十六进制前面加 0x
alert(Number.MAX_VALUE); // 1.7976931348623157e+308
alert(Number.MIN_VALUE); // 5e-324
alert(Infinity); // Infinity 无穷大
alert(-Infinity); // -Infinity 无穷小
alert(NaN); // NaN , Not a number,代表一个非数值
isNaN用来判断一个变量是否为非数字的类型,返回 true 或者 false
语法: var 变量名A = isNaN(变量名B)
-
String 字符串型
转义符 解释说明 \n 换行符,n 是 newline 的意思 \ \ 斜杠 \ ’ ’ 单引号 " ”双引号 \t tab 缩进 \b 空格 ,b 是 blank 的意思
字符串长度 —— 语法:语法: var 变量名A = 变量名B.length
字符串拼接
多个字符串之间可以使用 + 进行拼接,其拼接方式为 字符串 + 任何类型 = 拼接之后的新字符串
拼接前会把与字符串相加的任何类型转成字符串,再拼接成一个新的字符串
如果变量两侧都有字符串拼接,口诀“引引加加 ”,删掉数字,变量写加中间
- Boolean 布尔值类型,如true、false,等价于1和0、
- Undefined 未定义——一个声明后没有被赋值的变量会有一个默认值undefined
- Null 空值——一个声明变量给 null 值,里面存的值为空
获取变量数据类型
typeof 可用来获取检测变量的数据类型
var num = 18;
console.log(typeof num) // 结果 number
数据类型转换
-
转换为字符串
1.toString() 语法:alert(变量名.toString())
2.String()强制转换 语法:alert(String(变量名))
3.加号拼接字符串:和字符串拼接的结果都是字符串(隐式转换)
-
转换为数字型
1.parseInt(string)函数 语法:parseInt(’string‘)
2.parseFloat(string)函数 语法:parseInt(’string‘)
3.Number()强制转换 语法:Numer(‘string’)
4.js隐式转换:利用算术运算隐式转换为数值型 比如:‘12’-0
-
转换为布尔型
Boolean()函数 语法:Boolean(‘string’)
关键字
包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with 等。
2.运算符、流程控制、循环
递增运算符
++num 前置递增,就是自加1,类似于 num = num + 1,但是 ++num 写起来更简单。
使用口诀:先自加,后返回值
num++ 后置递增,就是自加1,类似于 num = num + 1 ,但是 num++ 写起来更简单。
使用口诀:先返回原值,后自加
比较运算符
< > <== >== == != === !==
逻辑运算符
与&& 或|| 非!
流程控制
if 语句
// 适合于检查多重条件。
if (条件表达式1) {
语句1;
} else if (条件表达式2) {
语句2;
} else if (条件表达式3) {
语句3;
....
} else {
// 上述条件都不成立执行此处代码
}
三元表达式
表达式1 ? 表达式2 : 表达式3;
switch分支流程控制
switch( 表达式 ){
case value1:
// 表达式 等于 value1 时要执行的代码
break;
case value2:
// 表达式 等于 value2 时要执行的代码
break;
default:
// 表达式 不等于任何一个 value 时要执行的代码
}
注意: 执行case 里面的语句时,如果没有break,则继续执行下一个case里面的语句。
for循环
for(初始化变量; 条件表达式; 操作表达式 ){
//循环体
}
while循环
while (条件表达式) {
// 循环体代码
}
do-while循环
do {
// 循环体代码 - 条件表达式为 true 时重复执行循环体代码
} while(条件表达式);
continue
continue 关键字用于立即跳出本次循环,继续下一次循环(本次循环体中 continue 之后的代码就会少执行一次)
break
立即跳出整个循环(循环结束)
3.数组、函数
创建数组
-
利用 new 创建数组
var 数组名 = new Array() ; var arr = new Array(); // 创建一个新的空数组
注意 Array () ,A 要大写
-
利用数组字面量创建数组
//1. 使用数组字面量方式创建空的数组 var 数组名 = []; //2. 使用数组字面量方式创建带初始值的数组 var 数组名 = ['小白','小黑','大黄','瑞奇'];
数组中新增元素
数组[ 数组.length ] = 新数据;
函数的使用
声明函数
// 声明函数
function 函数名() {
//函数体代码
}
调用函数
// 调用函数
函数名(); // 通过调用函数名来执行函数体代码
函数的参数
- 形参:函数定义时设置接收调用时传入
- 实参:函数调用时传入小括号内的真实数据
函数的返回值
return 语句
- 在使用 return 语句时,函数会停止执行,并返回指定的值
- 如果函数没有 return ,返回的值是 undefined
arguments的使用
当不确定有多少个参数传递的时候,可以用 arguments 来获取
arguments展示形式是一个伪数组,可以进行遍历
- 具有 length 属性
- 按索引方式储存数据
- 不具有数组的 push , pop 等方法
4.作用域、预解析、对象
JavaScript(es6前)中的作用域有两种:
全局作用域 在函数内部没有声明直接赋值的变量属于全局变量
局部作用域(函数作用域)
预解析
-
预解析:在当前作用域下, JS 代码执行之前,浏览器会默认把带有 var 和 function 声明的变量在内存中进行提前声明或者定义。
-
代码执行: 从上到下执行JS语句。
预解析会把变量和函数的声明在代码执行之前执行完成。
对象
所有的事物都是对象,对象是由属性和方法组成的
- 属性:事物的特征,在对象中用属性来表示(常用名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
创建对象的三种方式
1.利用字面量创建对象
var 对象名 = {
属性1:属性值1;
属性2:属性值2;
.......
sayHi : function(){
alert('大家好啊~');
}
};
调用对象——对象名.属性名 或 对象名[‘属性名’]
调用对象方法——对象名.方法名()
2.利用 new Object 创建对象
var 对象名 = new Obect();
通过内置构造函数Object创建对象,此时变量已经保存了创建出来的空对象
通过对象操作属性和方法的方式,来为对象增加属性和方法
比如——对象名1.属性1=’XXX‘;
3.利用构造函数创建对象
function 构造函数名(形参1,形参2,形参3) {
this.属性名1 = 参数1;
this.属性名2 = 参数2;
this.属性名3 = 参数3;
this.方法名 = 函数体;
}
构造函数的调用格式
var obj = new 构造函数名(实参1,实参2,实参3)
以上代码中,obj即接收到构造函数创建出来的对象
遍历对象
其语法如下:
for (var 变量 in 对象名字) {
// 在此执行代码
}
5.内置对象
Math对象
属性、方法名 | 功能 |
---|---|
Math.PI | 圆周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 四舍五入版 就近取整 注意 -3.5 结果是 -3 |
Math.abs() | 绝对值 |
Math.max()/Math.min() | 求最大和最小值 |
Math.random() | 获取范围在[0,1)内的随机数 |
// Math随机数方法 包含两端的2个数字
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandom(1, 10));
日期对象
- 获取当前时间必须实例化:
var now = new Date();
- 获取指定时间的日期对象
var future = new Date('2019/5/1');//或者 ('2019-10-10 8:8:8')
// 返回当前年份
console.log(date.getFullYear());
// 返回当前月份 数值比实际月份小1 需要+1
console.log(date.getMonth() + 1);
// 返回当前日期是本月的多少日
console.log(date.getDate());
// 返回当前日期是周几 注意:返回当前是周几 周日返回值为0
console.log(date.getDay());
// 返回当前小时
console.log(date.getHours());
// 返回当前分钟
console.log(date.getMinutes());
// 返回当前秒钟
console.log(date.getSeconds());
- 获取总毫米数
基于1970年1月1日(世界标准时间)起的毫秒数
获取总毫秒数如下
// 实例化Date对象
var now = new Date();
// 1. 用于获取对象的原始值
console.log(date.valueOf())
console.log(date.getTime())
// 2. 简单写可以这么做
var now = + new Date();
// 3. HTML5中提供的方法,有兼容性问题
var now = Date.now();
数组对象
检测是否为数组
1.instanceof 可以判断一个对象是否是某个构造函数的实例 返回值为true或者false
语法:数组名 instanceof Array
比如:console.log(arr instanceof Array);
2**.Array.isArray(数组名)**用于判断一个对象是否为数组 返回值为true或者false 是 HTML5 中提供的方法
添加删除数组元素
方法名 | 说明 | 返回值 |
---|---|---|
push(参数1…) | 末尾添加一个或多个元素–数组名.push(要添加的) | 新的长度 |
pop() | 删除最后一个元素,数组长度减一 | 删除的元素值 |
unshift(参数1…) | 开头添加一个或多个元素 | 新的长度 |
shift() | 删除第一个元素,数组长度减一 | 第一个元素值 |
注意:push、unshift为增加元素方法;pop、shift为删除元素的方法
数组排序
方法名 | 说明 |
---|---|
reverse() | 颠倒数组中元素顺序 |
sort() | 对数组的元素进行排序 |
注意:sort方法需要传入参数来设置升序、降序排序
- 如果传入“function(a,b){ return a-b;}”,则为升序
- 如果传入“function(a,b){ return b-a;}”,则为降序
数组转换为字符串
1.toString() 把数组转换成字符串,逗号分隔每一项
2.join(‘分隔符’) 把数组中的所有元素转换为一个字符串
注意:二者均返回一个字符串,join方法如果不传入参数,则按照 “ , ”拼接元素
数组对象转换为字符串格式
JSON.stringify()
其他方法
数组连接 concat(‘连接内容’)
数组截取字符串 slice(截取的起始位置,截取的数量)
数组替换 replace(‘被替换的字符’,‘替换为的字符’) 只会替换第一个
数组根据索引号删除相关内容 splice(索引号,从索引号处开始要删除的数量 )
字符串对象
js 会把基本数据类型包装为复杂数据类型
字符串转换为数组对象
JSON.parse()
字符串操作方法
连接字符串 str.concat(‘连接内容’)
查找字符串 str.substr(start,length) 从start位置开始,length取的个数
截取字符串 slice(start,end) 从start位置开始,截取到end位置,end取不到
替换字符串 str.replace(‘被替换的字符’,‘替换为的字符’) 只会替换第一个
字符转换为数组 str.split(‘分隔符’)