转换为布尔型
Boolean()函数 说明:其他类型转成布尔值 实例:Boolean('true')
代表空,否定的值会被转换为false,如'' 0 NaN null undefined
其余的值都会被转换成true
运算符
console.log(1 + 1);
console.log(1 - 1);
console.log(1 * 1);
console.log(1 / 1);
//%取余运算
console.log(1 % 1);
//递增(++)和递减(--)
//前置递增运算符 先+1后返回值
var num = 1;
++num;//2
++num + 1;//3
num++ + 1;//2 num为2
//前置自增和后置自增如果单独用 效果是一样的 否则不一样
//比较运算符
< 小于
> 大于
>= 大于等于
<= 小于等于
== 判断号
!= 不等号
=== !== 全等 要求值和数据类型都一样
//逻辑运算符
&& 逻辑与
|| 逻辑或
! 逻辑非
//运算符优先级
一元运算符里面的逻辑非优先级很高
逻辑与比逻辑或优先级高
流程控制-分支
if (条件表达式) {
//执行语句
}
//
if () {
}else if () {
//执行
}else if () {
//执行
}else {
//总结语句
}
三元表达式
条件表达式? 表达式1:表达式2 //如果为真执行表达式1为假执行表达式2
分支流程控制语句
switch(表达式) {
case 条件1:
执行;
break;
case 条件2:
执行;
break;
default:
执行;
}
//我们开发 表达式经常写成变量
//匹配的时候是 全等 必须值和类型都一致才会进去
//break如果当前的case里面米有break则不会退出switch 继续执行下一个case
switch 和if else if语句的区别
一般情况下可以相互替代
1,一般确定值的情况下用switch 区间范围用if else if
2,switch执行率更高直接跳到符合条件的选项 if else if 每个都要判断
3,分支多用switch 少用if
循环控制
//for 循环
for (let i = 0; i < 100; i++) {
console.log(i);
}
//九九乘法表
var str = '';
for (var i = 1; i <= 9; i++) {
for (var j = 1; j <= i; j++) {
str += j + '*' + i + '=' + i*j + ' ';
// console.log(str);
}
str = str + '\n'
}
console.log(str);
//while循环
var i = 0;
while(i < 5) {
console.log(i);
i++;
}
//do while循环
var i = 0;
do {
console.log(i);
i++;
} while(i < 5)
continue关键字 跳出本次循环 进入下一次循环
break关键字 结束所有循环
数组 可以存放任意的数据类型
//创建数组的两种方式
//利用new创建数组
var arr = new Array();
//利用数组字面量创建数组
var arr = []
//访问数组元素(索引)
arr[0]
//获取长度
var array = ['1','2'];
console.log(array.length);
//求数组中的最大值
var array = [2,54,43,45,67,3,56,78];
var maxNum = array[0];
for (let index = 0; index < array.length; index++) {
let num = array[index];
if (num > maxNum) {
maxNum = num
}
}
console.log(maxNum);
//冒泡排序 双重数组
var array = [2,54,43,45,67,3,56,78];
for (let i = 0; i < array.length-1; i++) {
for (let j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
var temp = [];
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
console.log(array);
函数
函数就是封装了一段可以被重复执行调用的代码块:大量代码重复使用
//声明函数
function log() {
console.log('你好');
}
log();
//带参数的函数
function log(value) {
console.log(value);
}
log('你好测试');
log(1);
//js语法自由度相当高 多参数 多传参会忽略 少传参没传的形参为undefined 计算结果就会使NaN
//带会返回值的函数
func name() {
return 2;
}
var name = name();//name为2
//arguments对象的使用
function fn() {
console.log(arguments);
}
fn(1,2,3);
//伪数组 并不是真正意思上的数组
//具有数组的length属性
//按照索引的方式进行存储的
//没有真正数组的一些方法 pop() push()
return 有终止函数的作用
函数如果没有return 则返回undefined
//定义函数的两种方式
//利用函数关键字自定义函数
function fn() {
}
//函数表达式(匿名函数)
var 变量名 = function(){
//代码
};
var num = 10;//↑相似
作用域
就是代码名字在某个范围内起的作用
变量的作用域: 根据作用域的不同 我们变量分为全局变量和局部变量
全局变量: 在全局作用域下的变量 在全局下都可以使用
局部变量: 在局部作用域下的变量 后者在函数内部的变量就是局部变量
函数的形参也是局部变量
链式规则(就近原则)
预解析
1,我们js引擎运行js 分为两步: 预解析 代码执行
2,预解析 js引擎会把js里所有的 var 还有function 提升到当前作用域的最前面
3,代码执行 按照代码书写的顺序从上往下执行
4,预解析分为变量预解析(变量提升) 和函数预解析(函数提升)
变量提升:就是把所有变量声明提升到当前的作用域最前面
函数提升:就是把所有函数的声明提升到当前作用域最前面
f1();
console.log(c);
console.log(b);
console.log(a);
function f1() {
var a = b = c = 9;
console.log(a);
console.log(b);
console.log(c);
}
//作用域和预解析经典案例 (9,9,9,9,9,报错)
js对象
跟swift中的对象一个意思用来方便存储一个事物的各种属性
//利用对象字面量创建对象{}
var obj = {};//创建一个空的对象
var person = {
name: '张三' ,
age: 18 ,
sex : '男' ,
sayHi: function() {
//代码
}
}
//里面的属性或者方法我们采取键值对的形式
//多个属性或者方法中间用逗号隔开
//方法冒号跟的事一个匿名函数
//调用对象的属性 我们采用点语法
person.name
//里面new Object 来创建对象
var obj = new Object();//创建一个空对象
obj.name = '张三';
obj.play = function() {
//执行代码
}
//利用构造函数创建对象
//原因前面两种方法一次只能创建一个对象
function 构造函数名() {
this.属性 = 值;
this.方法 = function() {
}
}
new 构造函数名();//调用构造函数
//构造函数实例
//构造函数
function Person(name,age,sex) {
this.name = name;
this.age = age;
this.sex = sex;
this.sing = function(action){
console.log(action);
}
}
let object = new person('张三','18','人妖');
console.log(object.age,object.name,object.sex);
object.sing('游泳');
//1构造函数名字首字母大写
//2我们构造函数不需要return就可以返回结果
//3我们调用构造函数必须要使用new
//遍历对象
for (var key in object) {
console.log(key);//属性名称
console.log(object[key]);//属性值
}
js内置对象
js中的对象分为: 自定义对象,内置对象,浏览器对象
内置对象: js语言中自带的一些对象,供开发者使用,提供了常用的必要功能(属性和方法)
内置对象优点: 帮助我们快速开发
//Math是一个内置对象,它具有数学常数和函数的属性和方法
//数学对象,不是一个构造函数,所以我们不需要new来调用,而是直接使用里面的属性和方法即可
//圆周率
console.log(Math.PI);
//最大值
console.log(Math.max(2,3,56));//56
//最小值
console.log(Math.min(2,3,56));//2
console.log(Math.min(2,3,'老师'));//NaN
console.log();//-Infinity 负无穷大
//利用对象封装自己的数学对象
var mayMath = {
Pi: 3.14;
max: function() {
}
min: function() {
}
}
//绝对值方法
console.log(Math.abs(-1)); //1
console.log(Math.abs('-1')); //1 隐式转换
console.log(Math.abs('字符串')); //NaN
//向下取整
console.log(Math.floor(1.2)); //1
//向上取整
console.log(Math.ceil(1.2)); //2
//四舍五入
console.log(Math.round(1.2)); //1
//随机数 0-1之间
console.log(Math.random()); //[0,1)
//得到两个数之间的随机整数 并且包含这两个整数
function getRandom(min,max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
console.log(getRandom(1,5));