1.JS分为三种 行内 内嵌 引入
①行内
②内嵌 在head中写<script>
③引入 外部写JS 运用 <script src="my.js"> <script>引入
2.JavaScript 输入输出
①alert() 输出的意思
②prompt() 输入框的意思
③console.log() 控制台输出 控制台打印输出
3.变量
声明变量 var 变量名
声明多个变量 变量名之间用“,”隔开。
例如 var name = '张三',
age = '18'
sex = '男'
4.简单数据类型
JS的变量数据类型只有程序在运行过程中根据等号右边的值来确定的
变量数据类型是可以变换的
①数字形Number
在JS中八进制前面加0,十六进制加0x
JS最大值Number.MAX_VALUE
JS最小值Number.MIN _VALUE
isNaN(值) 这个方法用来判断值非数字 并且返回一个值 如果是数字返回false 如果不是数字返回是true
②字符串形 String
需要加“”或者‘’
如果想要在字符串内加“ ”或者‘ ’必须保持外双内单 或者外单内双
\n 换行 \b空格
获取字符串长度 length属性
字符串拼接 +号(只要有字符串和其他类型拼接+则最后结果为字符串类型)
③布尔型 Boolean
true 和 false
true 参与运算当1来看
false 参与运算当0来看
如果一个值声明但未赋值 则输出Undefined
5.获取检查变量数据类型 typeof
用法 console.log(typeof 变量名)
6.转化字符串的三种方法
console.log(变量名.toString());
console.log(String(变量名));
利用 + 号拼接字符串
7.转化为数字形的三种方法
①console.log(parseInt(变量名)); 得到是整数 小数点后全部取消 去掉单位 字符串过多 会显示NaN
②console,log(parseFloat(变量名));得到的可以是小数 浮点数
③Number() 强制转化数字形 console.log(Number(变量))
④利用算数运算 隐式转化 (- 或者 * 或者 /)
例如console.log('12'-0) 得到的是数字形的12
8.转化为布尔类型的
console.log(Boolean(变量名0));
代表空、否定的值会被转化为false, 如"、0、NaN、null、undefined
其余值均为true
9.递增递减运算符
++变量,--变量
或者
变量++,变量--
和C#区别 C# 只有 i++ ,i-- 表示递增
10.逻辑 与逻辑中断
&& 与
|| 或
! 非
逻辑中断 && (数字中只有0是假)
表达式1 && 表达式2
如果1为真,则返回2
如果1为假,则返回1
逻辑中断 ||
表达式1 || 表达式2
如果1为真,则返回1
如果1为假,则返回2
11.switch
switch(表达式){
case value1(匹配项):
执行语句1;
break;
case value2:
执行语句2;
break;
....
default:
执行最后语句
}
switch 用于比较确定的
if else if 用于范围类型判断
12.创建数组
方法①:var 数组名 = new Array();
方法②:使用数组字面量方式创建空的数组;
var 数组名= [ ]; 可以存放任意数组
13.获取数组元素 索引
数组名[索引];
14.JavaScript 可新增数组元素
改变length 值后 修改数组
arr.length=i;
再利用索引arr[i-1]=值; 添加值
15.JS函数
函数就是封装了一段可以被重复执行调用的代码块
声明函数
function 函数名() {
函数体
}
调用函数
函数名();
声明函数小括号形参
调用函数小括号实参
形参接受实参
函数返回
function 函数名(){
return 需要返回的结果
}
函数名();
return 将值返回给调用者 然后输出函数 就能得到值
16.arguments 对象
arguments 对象中存储了传递的所有实参 伪数组的性质
可以按照数组的方式遍历arguments
只有函数才有 arguments 对象
arguments 接受所有的实参
伪数组:
1.具有数组的length属性
2.按照索引方式存储
3.它没有真正数组的一些方法 pop() push()等等
17.JS函数的俩种声明方法
①利用函数关键字自定义函数(命名函数)
function 函数名(){
函数体
}
函数名();
②函数表达式(匿名函数)
var 变量名=function () {}
变量名();
18.JS的作用域
JS作用域:就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突
全局作用域:整个script标签 或者一个单独JS标签
局部作用域(函数作用域):在函数内部就是局部作用域 这个代码的名字只在函数内部起效果和作用
作用域链:链式查找 就近原则
19.预解析
JS引擎运行JS 分俩步:预解析 代码执行
①预解析 把当前的var function 声明放到最前面
②代码执行 按照从上到下的顺序执行代码s
预解析分为 变量预解析(变量提升)和函数预解析(函数提升)
变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
20.JS对象
①对象是一组无序的相关属性和方法的集合 是由属性和方法组成的
属性:事物的特征,在对象中用属性来表示
方法:事物的行为,在对象中用方法来表示
对象里面可以储存任意数据类型
var 对象名={ }
②使用对象
方法一:调用对象属性 采取 对象名.属性名
方法二:对象名['属性名']
调用对象里面的方法 采取 对象名.方法名(有参数加参数);
21.创建对象的三种方法
①var 对象名={ }
②利用new Object 创建对象
var 对象名 = new Object();
③构造函数创造对象
function 构造函数名(参数){
this.属性 = 值;
this.方法 = function(){}
}
var 变量名=new 构造函数名(参数);
想要添加 就继续 构造 var 变量名 = new 构造函数名();
构造函数名字首字母大写
构造函数不需要return 就可以返回结果
我们要构造函数必须要new
我们只要new 构造函数名() 调用函数就创建一个对象 变量名();
我们的属性和方法前面必须添加 this
我们利用构造函数创建对象的过程也称之为对象的实例化
new 在执行时会做的四件事情
①在内存条中创建一个新的空对象
②让this指向这个新对象
③执行构造函数里面的代码,给这个新对象添加属性和方法
④返回这个新对象(所以构造函数里面不需要return)
遍历对象属性
for(var 变量名 in 对象名){
console.log(对象名[变量名])
}
22.内置对象
JS内部自带的对象 可以直接调用
JavaScrpit 对象分三种:自定义对象 内置对象 浏览器对象
23.Math对象(数学对象)
不需要new 构造 直接调用
Math.方法();
常见的Math
最大值 Math.max();
最小值 Math.min();
绝对值方法 Math.abs(1);
取整的三个方法:
向下取整 向小的取整 Math.floor();
向上取整 向大的取整 Math.ceil();
四舍五入取整 .5往大了取整 Math.round();
random()随机数 取[0,1) 之间的数 左闭右开
① 俩个数之间的随机整数 包括这俩个整数
Math.floor(Math.random()*(max-min+1))+min;
function getRandom(min,max){
return Math.floor(Math.random()*(max-min+1))+min;
}
24.Date日期对象
调用Date对象需要构造函数 必须要new
var 名称 = new Date();
①如果没有参数,返回系统现在的时间
②参数常用写法 数字型2019,10,01 或者是 字符串型 '2019-10-1 8:8:8'
③自定义写法
var da = new Date();
da.getFullYear(); 返回当前年份
da.getMonth(); 返回当前月份(0-11)使用使用时候都是 da.getMonth+1;
da.getDate(); 返回的当前日份
da.getDat(); 返回星期几(周一到周六是1-6 周日是0)
da.getHours(); 获取当前小时
da.getMinutes(); 获取当前分钟
da.getSeconds(); 获取当前秒钟
④Date总的毫秒数(时间戳)
1970年1月1日 为初始时间 到现在一共多少毫秒
var date = new Date();
date.valueOf();
date.getTime();
简单写法
var date1 = +new Date();
更简单H5新增获取总的毫秒数
Date.now();
d=parseInt(总秒数/60/60/24); //计算天数
h=parseInt(总秒数/60/60%24);// 计算小时
m=parseInt(总秒数/60%60); //计算分数
s=parseInt(总秒数%60);//计算当前秒数
小于10的时间前面加0 常用三元表达式 例如:h=h<10? '0' + h : h;
25.Array数组对象
instanceof 运算符 检查是否为数组
用法:数组名 instanceof Array
返回true 或者 false
①数组方法 Array.isArray(数组名); 也是判断是否数组 返回true和false 优先于 instanceof
②push() 在外面数组的末尾 添加一个或者多个数组元素
数组名.push(); 参数直接写 数组元素就可以了 push()完毕之后返回的是新数组的长度
③unshift() 开头添加数组
数组名.unshift(); 参数直接写 数组元素就可以了 unshift()完毕之后返回的是新数组的长度
④pop() 删除数组的最后一个元素
数组名.pop(); 一次只能删除一个元素 不跟参数 pop()完毕后返回删除的那个元素
⑤shift() 删除数组的第一个元素
数组名.shift(); 一次只能删除一个元素 不跟参数 shift()完毕后返回删除的那个元素
⑤reverse() 翻转数组顺序
数组名.reverse();
⑥sort() 数组排序(冒泡排序)
数组名.sort(); 注意点:sort是按照个位数大小先排列的 如果有个位数以上 例如:1,7,13 排序的话 sort后是 1,13,7 先排个位再排十位。
解决方法:数组名.sort(function(a,b){
return a-b;
}) ; 这个是升序 如果降序就是 return b-a;
⑦indexOf() 返回元素索引号 参数写元素 如果没有返回-1
⑧lastIndexOf() 倒数元素 然后返回索引 参数写元素 如果没有返回-1 如果数组有重复元素 则会返回第一个碰到元素的索引 后面重复元素不会再返回
⑨join(); 分隔符符号 在数组中每个元素后面添加里面添的参数
数组名.join();
⑩concat(); 可以在现有数组的全部元素基础上创建一个新数组
新数组=要克隆的数组名.concat(); 参数中添上需要添加的其他元素
26.String 字符串对象
对象才有 属性和方法 复杂数据类型才有 属性和方法
简单数据类型为什么会有length属性呢?
基本包装类型:就是把简单数据类型 包装成为了 复杂数据类型 这样简单数据类型就有属性和方法了
字符串是不会变的 只是地址改了 会在内存中开辟一个空间 修改只会改变地址
利用indexOf('查找元素',[起始位置]) 查找字符串位置
根据位置返回字符
charAt(index);
字符串拼接
链接字符concat()
截取字符substr('截取位置','截取几个字符') 第一个是索引 第二个几个字符
替换字符 replace('被替换字符','替换的字符')
字符串转化数组 split('该字符串的分隔符') 数组转化字符串 join(转化成字符串后之间的分隔符);
27.简单和复杂数据类型
简单数据类型 值类型
复杂数据类型 引用类型
堆和栈
①栈(操作系统):由操作系统自动分配释放存放函数的参数值、局部变量的值等。其操作方式类似于数据结构中的栈。 简单数据类型存放栈
②堆(操作系统):存储复杂数据类型(对象),一般由程序员分配释放,若程序员不释放,由垃圾回收机制回收。 复杂数据类型存放堆
简单数据类型会在栈里面开辟空间 储存值
复杂数据类型也会在栈里面开辟空间 单储存的是地址 十六进制表示 地址指向堆 堆里面储存着复杂数据类型的数据