一、变量
var :定义/声明变量
var myname = 'zhangsan'; // 声明变量
myname = 'lisi'; // 重新声名变量
console.log(myname); // 控制台输出最后定义的值
var age = 18,addres = '火影村', money = 1.8; // 声明多个变量
var sex; // 声明不赋值
conlose.log(sex); // 结果是 undefind
qq = 123456;
conlose.log(qq); // 不声明吗,直接赋值,不报错,不提倡
变量名命名规范:
- 由字母(a-zA-Z)数字(0-9),下划线(_),美元符号($)组成
- 严格区分大小写,不能以数字开头,不能是关键字、保留字,如:var、for、while...
- 遵守驼峰命名法,首字母小写,后面单词首字母大写
二、变量的数据类型
JS的变量数据类型是只有在程序运行过程中,根据等号右边的值来确定的
简单数据类型:
- number —— 数字型 —— 0,1,2
- boolean —— 布尔型 —— true/false
- string —— 字符型 —— " ",' ',引号
- undefined —— 声明未赋值 —— undefined
- null —— 空值 —— null
- isNaN() —— 判断非数字,是数字返回 false,不是返回 true
- length —— str.length 检测字符串长度
三、数据类型转换
- 1、转换为字符串 toString()
var num = 1;
console.log(num.toString());
String() // 强制转换
var num = 1;
console.log(String(num));
- 2、转换为数字型
ParseInt(变量); // 取整
ParseFloat(变量); // 浮点型
Number(变量); // 强制转换
- 3、转换为布尔型
Boolean(值); // 空、否定的值转换为false,其余转换为true
四、运算符
- 普通运算符
+ 连接符,数字相加,字符相连
- 数字相减
* 数字相乘
/ 数字相除
% 取余 10%3 == 1;
++i 前置递增,自增一,先自增,后返回值
i++ 后置递增,自增一,先返回值,后自增
- 逻辑运算符
&& 逻辑与、与、and
|| 逻辑或、或、or
! 逻辑非、非、not 取反符
- 短路运算(逻辑中断)
当有多个表达式时,左边的表达式可以确定结果时,就不再继续运算右边的表达式
五、流程控制
顺序结构 --> A --> B -->
分支结构 条件执行 --> 判断 --> B -->
↓
A -->
循环结构 A <-------
判断↓ → ↑ yes
no
- 分支结构:
if(条件表达式){
条件成立执行语句
}
- 多分支语句
if(条件表达式){
语句1;
}else if{
语句2;
}else{
最后语句
}
三元运算:
- △ 条件表达式?表达式1:表达式2
- 如果条件结果为真,则返回表达式1的值,为假则返回表达式2的值
- Switch 语句
switch(表达式){
执行语句1;
break;
case value2:
执行语句2;
break;
default:
最后语句;
}
循环语句
- for循环
for(初始化变量; 条件表达式; 操作表达式){
循环体;
}
- while循环
var i = 0; // 初始化变量
while(条件表达式){
循环体;
i++; // 操作表达式
}
六、函数
- 函数的使用:
// 声明函数
function 函数名(){
函数体
}
函数名(); // 调用函数,不调用,不执行
- 函数的参数:
function 函数名(形参1, 形参2...){
函数体
}
函数名(实参1, 实参2...)
形参:形式上的参数,函数定义的时候传递的参数,当前未知
实参:实际上的参数,函数调用时传递的参数,实参是传递给形参的arguments
// 存储传递的所有实参,展示形式时一个伪数组,具有 length 属性,按索引方式存储数据,不具有数组的push、pop等方法
function fn() {
console.log(arguments); // 里面存储了所有传递过来的实参 arguments = [1, 5, 3, 4, 5]
// console.log(arguments.length);
// console.log(arguments[1]);
// 我们可以按照遍历数组的方式遍历arguments
for (var i = 0; i < arguments.length; i++) {
console.log(arguments[i]);
}
}
fn(1, 5, 3, 4, 5)
函数类型
- 1、利用函数关键字定义函数(命名函数)
function fn(){
函数体;
}
fn();
- 2、函数表达式(匿名函数)
var fn = function(){
函数体;
}
fn(); // fn 是变量名,不是函数名
JS作用域:就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性、减少命名冲突
- 全局作用域:整个script标签、或者是一个单独的JS文件
- 局部作用域(函数作用域):在函数内部就是局部作用域,这个代码的名字只在函数内部起作用和效果
根据作用域的不同,变量分为全局变量和局部变量
- 全局变量:在全局作用域下的变量,在全局下可以使用
注:如果在函数内部,没有声明直接赋值的变量也属于全局变量 - 局部变量:在局部作用域下的变量或在函数内的变量
注:函数的形参也可看做局部变量
- 全局变量:在全局作用域下的变量,在全局下可以使用
七、对象
对象创建:
1、字面量创建
var mr = {
uname:'鸣人';
sex:'男';
skill:function(){
console.log('影分身');
}
}
console.log(mr.uname); // 鸣人
mr.skill(); // 影分身
2、new object创建对象
var mr = new.Object();
mr.uname = '鸣人';
mr.sex = '男';
mrr.skill = function(){
console.log('影分身');
}
console.log(mr.uname); // 鸣人
mr.skill(); // 影分身
3、构造函数:
function Star(){ // 首字母大写
this.属性 = 值;
this.方法 = function(){
console.log('hi~');
}
}
new Star(value1,value2...); // 调用构造函数(必须使用 "new")
console.log(Star.属性);
遍历对象
for(var k in obj){
console.log(k); // 输出属性名
console.log(obj[k]); // 输出属性值
}
内置对象
- Math :数学对象
Math.PI(); // 获取圆周率
Math.max(); // 最大值
Math.min(); // 最小值
Math.abs(); // 绝对值
Math.floor(); // 向下取整
Math.ceil(); // 向上取整
Math.round(); // 四舍五入
Math.random(); // 随机
function getRandom(min, max){
return Math.floor(Math.random()*(max-min+1)+1);
}
console.log(getRandom(0,100)); // 输出 0 ~ 100 之间的随机整数
- Date: 日期对象
var date = new Date(); // 如果没有参数,返回当前系统时间
var date1 = new Date(2021,10,28); // 数字型
var date2 = new Date('2021-10-28 15:50:20'); // 字符型
console.log(date1); // 返回的是 11月,不是10月
- 获取当前系统 年 月 日 时 分 秒 周几
var date = new Date();
date.getFullYear(); //返回当前日期的年份 2021
date.getMonth() + 1; //返回当前日期的月份 必须+1 [0,1,2...11]
date.getDate(); //返回的是几号
date.getDay(); //返回周几 1是周一 6是周六 0是周日
date.getHours(); //时
date.getMinutes(); //分
date.getSeconds(); //秒
- 获取时间戳
var date = +new Date(); // 常用
Date.now(); // H5新增
var date1 = new Date();
console.log(date1.getTime()); // 不常用
console.log(date1.valueOf()); // 不常用
- 时间戳转换
d = parseInt(总秒数/ 60/60 /24) 计算天数
h = parseInt(总秒数/ 60/60 %24) 计算小时
m = parseInt(总秒数/ 60%60) 计算分数
s = parseInt(总秒数%60) 计算秒数
- 倒计时案例
function countDown(time) {
var newTime = +new Date(); //返回当前时间总的毫秒数
var inputTime = +new Date(time); //返回用户输入时间总的毫秒数
var times = (inputTime - newTime) / 1000; //剩余时间总的秒数
var d = parseInt(times / 60 / 60 / 24); //天
d = d < 10 ? '0' + d : d;
var h = parseInt(times / 60 / 60 % 24); //时
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60); //分
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60); //秒
s = s < 10 ? '0' + s : s;
return d + '天' + h + '时' + m + '分' + s + '秒';
}
console.log(countDown('2021-10-28 00:00:00'));
- 数组对象
arr.push(value1,value2...); // 末尾添加一个或多个
arr.unshift(value1,value2...); // 开头添加一个或多个
arr.pop(); // 删除最后一个元素
arr.shift(); // 删除第一个元素
arr.reverse(); // 翻转数组,无参数
arr.sort(); // 排序
//*---冒泡排序---*
var arr = [1,7,6,2,9];
arr.sort(function(a,b){
return a-b; // 升序
return b-a; // 降序
})
arr.indexOf('李二'); // 返回该数组元素的索引,从前往后,只返回第一个满足条件的索引,如果没有返回-1
arr.lastindexOf('李二'); // 返回该数组元素的索引,从后往前,只返回第一个满足条件的索引,如果没有返回-1
arr.toString(); // 数组转化为字符串
arr.join('&'); // 数组转为字符串,不带参数默认用逗号连接
newarr = arr1.concar(arr2); // 合并数组,原数组不变,返回新数组
arr.slice(begin,end); // 截取数组元素,返回新数组,
//传一个值截取包括这个索引后的所有元素,
//传两个值截取包括开始索引到结束索引之间所有元素,不包括结束索引元素
arr.splice(begin,num); // 数组删除,返回被删除数组,原数组会改变 begin: 开始索引,num: 删除数量
1 条评论
作者的情感表达细腻入微,让人在阅读中找到了心灵的慰藉。