2019-12-09 从零开始的JS学习 二

转换为布尔型

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));

你可能感兴趣的:(2019-12-09 从零开始的JS学习 二)