变量
- 变量就是装数据的容器,是在内存中申请存放数据的空间
- 变量的数据类型只有程序在运行过程中,根据等号右边的值来确定的。js是动态语言,变量的数据类型是可以变化的。
- js数据类型分为简单数据类型,字符型。布尔型。
- isNaN()用来判断变量是否是非数字。
- 字符串string单引号 ;通过length属性检测字符串长度;
- 变量和字符串相连引引加加
- boolean布尔型true1、false0,
- undefined未定义数据类型,null空值,NaN非数字的。
- 数字转换字符串①num.tostring②string(num)③num+‘’。
- 字符串转换为数字①parseInt②parseFloat③Number()④使用运算符减除乘等于。
- 转换为布尔型boolean
运算符
- 运算符:算数运算符、递增递减运算符、比较运算符、逻辑运算符、赋值运算符。
- 前置递增、先自加,后运算。后置递增先原值运算后自加。单独使用运行结果相同。
- 逻辑与&&and、逻辑或||or、逻辑非!not。
4.
流程控制
- 流程控制就是来控制我们代码按照什么结构来执行,分为顺序结构、分支结构、循环结构。
- if语句里:三元表达式由三元运算符?:组成的式子。条件表达式 ? 表达式1 : 表达式2 。 如果条件表达式结果为真则返回表达式1的值,如果是假则返回表达式2的值。
- 分支语句:if else语句 、switch语句(针对特定值)。
- 循环语句:for循环(初始化变量、条件表达式、操作表达式)
- while循环(条件表达式)
- continue退出本次循环break退出整个循环
数组
- 数组(Array) :就是一组数据的集合 存储在单个变量下的优雅方式 。
利用new 创建数组 var arr = new Array(); // 创建了一个空的数组
利用数组字面量创建数组 [] var arr = []; // 创建了一个空的数组 var arr1 = [1, 2, 'pink老师', true];
- 我们数组里面的数据一定用逗号分隔。
- 用索引号获取数组元素。
- 用for循环遍历数组。
- 冒泡排序:
- 数组的增、改、删:
var arr = [1, 3, 4, 5];
arr.splice(1, 1);从索引为1开始删除1个,
arr.splice(0, 2, "andy", "andi");从索引为0开始修改两个值;
arr.splice(1, 0, 6, 7);从索引为1前面增加两个值
// 冒泡排序
// var arr = [5, 4, 3, 2, 1];
var arr = [4, 1, 2, 3, 5];
for (var i = 0; i <= arr.length - 1; i++) { // 外层循环管趟数
for (var j = 0; j <= arr.length - i - 1; j++) { // 里面的循环管 每一趟的交换次数
// 内部交换2个变量的值 前一个和后面一个数组元素相比较
if (arr[j] < arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
函数
- 定义:函数就是封装了一段可以被重复执行调用的代码块 目的: 就是让大量代码重复使用。
- 函数使用分为两步: 声明函数 和 调用函数。
- 在声明函数的小括号里面是 形参 (形式上的参数),在函数调用的小括号里面是实参(实际的参数。
- (1) 多个参数之间用逗号隔开
(2) 形参可以看做是不用声明的变量。 - return 终止函数,return 后面的代码不会被执行,如果函数没有 return 则返回undefined。
-
break ,continue ,return 的区别
- break :结束当前的循环体(如 for、while)
- continue :跳出本次循环,继续执行下次循环(如 for、while)
- return :不仅可以退出循环,还能够返回 return 语句中的值,同时还可以结束当前的函数体内的代码
- 当不确定有多少个参数传递的时候,可以用 arguments 来获取,arguments 对象中存储了传递的所有实参。arguments展示形式是一个伪数组。
- arguments使用:
function getMax() { // arguments = [1,2,3]
var max = arguments[0];
for (var i = 1; i < arguments.length; i++) {
if (arguments[i] > max) {
max = arguments[i];
}
}
return max;
}
- 函数的两种声明方式:
①命名函数
// 声明定义方式
function fn() {...}
// 调用
fn();
调用函数的代码既可以放到声明函数的前面,也可以放在声明函数的后面
②匿名函数(函数表达式)
// 这是函数表达式写法,匿名函数后面跟分号结束
var fn = function(){...};
// 调用的方式,函数调用必须写到函数体下面
fn();
函数调用的代码必须写到函数体后面
function fn1() {
console.log(111);
fn2();
console.log('fn1');
}
function fn2() {
console.log(222);
console.log('fn2');
}
fn1();
作用域
- JavaScript作用域 : 就是代码名字(变量)在某个范围内起作用和效果 目的是为了提高程序的可靠性更重要的是减少命名冲突。
- 变量的作用域: 根据作用域的不同我们变量分为全局变量和局部变量。
- 如果在函数内部 没有声明直接赋值的变量也属于全局变量。
- 从执行效率来看全局变量和局部变量
(1) 全局变量只有浏览器关闭的时候才会销毁,比较占内存资源
(2) 局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源 - 预解析:
我们js引擎运行js 分为两步: 预解析 代码执行
(1). 预解析 js引擎会把js 里面所有的 var 还有 function 提升到当前作用域的最前面
(2). 代码执行 按照代码书写的顺序从上往下执行
预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
(1) 变量提升 就是把所有的变量声明提升到当前的作用域最前面 不提升赋值操作
(2) 函数提升 就是把所有的函数声明提升到当前作用域的最前面 不调用函数
对象
- 对象是由属性和方法组成的。
- 使用对象字面量创建对象
var obj = {}; // 创建了一个空的对象
var obj = {
uname: '张三疯',
age: 18,
sex: '男',
sayHi: function() {
console.log('hi~');
}
}
- 利用 new Object 创建对象
var obj = new Object(); // 创建了一个空的对象
obj.uname = '张三疯';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
console.log('hi~');
}
4.构造函数泛指某一大类,对象是指具体事物。 利用构造函数创建对象,通过 new 关键字创建对象的过程我们也称为对象实例化
5. 构造函数的语法格式
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {}
}
new 构造函数名();
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(sang) {
console.log(sang);
}
}
var ldh = new Star('刘德华', 18, '男');
- 遍历对象for…in 语句用于对数组或者对象的属性进行循环操作
for (var k in obj) {
console.log(k); // k 变量 输出 得到的是 属性名
console.log(obj[k]); // obj[k] 得到是 属性值
}
我们使用 for in 里面的变量 我们喜欢写 k 或者 key
内置对象
Math对象
1) Math 对象不是构造函数,它具有数学常数和函数的属性和方法。跟数学相关的运算(求绝对值,取整、最大值等)可以使用 Math 中的成员。
属性、方法名 | 功能 |
---|---|
Math.PI | 圆周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 四舍五入版 就近取整 注意 -3.5 结果是 -3 |
Math.abs() | 绝对值 |
Math.max()/Math.min() | 求最大和最小值 |
Math.random() | 获取范围在[0,1)内的随机值 |
注意:上面的方法使用时必须带括号
2)获取指定范围内的随机整数function getRandom(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }
日期对象
1)Date是一个构造函数,所以使用时需要实例化后才能使用其中具体方法和属性。Date 实例用来处理日期和时间
数组对象
1)创建数组的两种方式(1)字面量方式(2)new Array()
2) 检测是否为数组:(1)instanceof 可以判断一个对象是否是某个构造函数的实例(2)Array.isArray()用于判断一个对象是否为数组,isArray() 是 HTML5 中提供的方法
3)添加删除数组元素的方法:
(1)push () 末尾添加一个或多个元素
(2)unshift()向数组的开头添加元素
(3)pop()删除数组最后一个元素
(4)shift()删除数组的第一个元素
4)数组排序
(1)reverse()颠倒数组元素的顺序
(2)sort()对数组元素进行排序
注意:sort方法需要传入参数来设置升序、降序排序
- 如果传入“function(a,b){ return a-b;}”,则为升序
- 如果传入“function(a,b){ return b-a;}”,则为降序
5) 数组索引方法
indexOf()lastIndexOf ()如果不存在返回-1。
6) 数组对象转换为字符串
JSON.stringify(),JSON.parse()字符串转换为数组对象
字符串对象
- 字符串的不可变:当重新给字符串变量赋值的时候,变量之前保存的字符串不会被修改,依然在内存中重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变。
- 根据字符返回位置:index Of (‘要查找的字符’,开始的位置)如果找不到就返回-1,lastindex Of()从后往前找,只找第一个匹配的。
- 根据位置返回字符:char At(index)返回指定位置的字符(index字符串的索引号)使用str.charAt(0) str[index] 获取指定位置字符(html5新增) charCodeAt(index)获取指定位置字符的ASCll码
- 字符串的操作方法:substr(start,length)从start开始(索引号),length取的个数。
- replace()方法字符串.replace(被替换的字符串, 要替换为的字符串);replace() 方法用于在字符串中用一些字符替换另一些字符
- split ()方法可以将字符串切分为数组 字符串.split(“分割字符”)
数据类型
- 简单数据类型:把值复制给了另一个变量,相互不影响。
- 复杂数据类型: 把地址复制给了另一个变量,相互影响。