JavaScript学习笔记

98 阅读5分钟

运算符:

  • 前置后置自增运算符: 

    ++num    先加一 再返回值     num++  先返回原值 后自加一

  • 比较运算符

18 == '18' (true)     18 === '18' (false)

  • 逻辑运算符

    逻辑与 && 逻辑或 || 逻辑非 !

  _    短路运算:_

1.逻辑与
语法:表达式1 && 表达式2
如果第一个表达式的值为真,则返回表达式2
如果第一个表达式的值为假,则返回表达式1
例:console.log(123 && 456); // 456
console.log(0 && 456); // 0
console.log(0 && 1 + 2 && 456 * 56789); // 0

2.逻辑或
语法: 表达式1 || 表达式2
如果第一个表达式的值为真,则返回表达式1
如果第一个表达式的值为假,则返回表达式2
例:console.log(123 || 456);  //123
console.log(0 || 456);  // 456
console.log(123 || 456 || 789); //789

分支结构

1.if语句:

if (条件表达式) {
    执行语句
}


if (条件表达式) {
    执行语句1
} else {
    执行语句2
}

if (条件表达式1) {
    语句1
} else if (条件表达式2) {
    语句2
} else if (条件表达式3) {
    语句3
} else {
    语句4
}    

2. 三元运算符

条件表达式 ? 表达式1 : 表达式2
var num = 10;
var result = num > 5 ? '是的' : '不是的';

3. switch 语句

switch (表达式) {
    case value1:
        执行语句1;
        break;
    case value2:
        执行语句2;
        break;
    ...
    default:
        执行最后的语句;
} //表达式要和value全等

循环

1.for 循环

for ( var i = 1; i <= 100; i++){
    console.log('你好吗');
}

2. while循环

van num = 1;
while (num <= 100) {
    console.log('你好吗');
    num ++;
}

3. do-while循环

var i = 1;
do {
    console.log('你好吗');
    i++;
} while (i <= 100)

数组

1.创建数组

1.使用new来创建
 var arr = new Array();
2.使用字面量来创建
var arr = [];
var arr = [1,2,3,4];

2.数组长度

arr.length()

3.新增数组元素

1.修改数组长度
var arr = ['red', 'green', 'blue'];
arr.length = 5;
console.log(arr); // ['red', 'green', 'blue', undefined, undefined]

2.直接通过索引添加数组元素
var arr = ['red', 'green', 'blue'];
arr[3] = 'pink';
arr[4] = 'hotpink';
console.log(arr); // ['red', 'green', 'blue', 'pink', 'hotpink']

函数

1.声明函数 & 调用函数

//声明函数
function 函数名 (形参1, 形参2,...) {
    函数体
}

function sayHi() {
    console.log('hi~~');
}

//调用函数
sayHi();

----------------------------------------------------
//声明函数2--函数表达式

var 变量名 = function(){};

var fun = function(){
    console.log('我是函数表达式');
}
//调用函数2
fun();

2.函数参数

function getSum(num1,num2) {
    console.log(num1 + num2);
}
//如果实参的个数多于形参的个数 会取到形参的个数
get(1,2,3); //会正常输出结果 但3不会被赋给形参
//如果实参的个数小于形参的个数 会取到undefined
get(1); //num1 = 1 num2 =  undefined 输出结果为NaN

3. return的返回值

// return只能返回一个值 返回的结果是最后一个值    
function fn(num1, num2) {
    return num1, num2;
}
fn(1,2); // 2

// return要想返回多个值,可以放数组里面进行返回
function getResult(num1,num2) { //返回两个数的加减乘除结果
    return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}

// 如果没有return 返回的结果是 undefined

4. arguments的使用

不确定函数里传递多少个参数的时候,可以用arguments来获取。

function fn() {
    console.log(arguments);
    console.log(arguments.length);
    console.log(arguments[2]);
    //我们可以按照数组的方式遍历arguments
    for (var i = 0; i < arguments.length; i++) {
        console.log(arguments[i]);
    }
}

全局变量 局部变量

只记一点:如果在函数内部,没有声明直接赋值的变量也属于全局变量

预解析

js引擎运行js 分为两步:预解析  代码执行

1.预解析:JS引擎会把js里面所有的var 还有 function 提升到当前作用域的最前面

代码执行: 按照代码书写顺序从上往下执行

2. 预解析分为 变量预解析(变量提升) 和 函数预解析(函数提升)

(1)变量提升 就是把所有的变量声明提升到当前作用域的最前面  不提升赋值操作

console.log(num); // 不报错 但输出undefined
var num = 10;

fun(); // 会报错 说函数未定义     相当于执行了代码:var fun;
var fun = function(){                            fun();
    console.log(22);                             fun = function() {
}                                                    console.log(22);
                                                 }
//所以函数表达式 调用 必须卸载函数表达式的下面

(2)函数提升 把所有的函数声明和定义提升到当前作用域的最前面

fn();  //可以执行
function fn() {
    console.log(1);
}

对象

1.创建对象

//1.利用对象字面量创建对象 {}
//  属性或方法采用键值对表示
//  多个属性或方法中间用逗号隔开
//  方法冒号后面跟着一个匿名函数
var obj = {
    uname: '张三丰',
    age:18,
    sex: '男',
    sayHi: function() {
        console.log('Hi~');
    }
}

//调用对象的属性:    对象名.属性名     或   对象名['属性名']
console.log(obj.uname);
console.log(obj['uname']);

//调用对象的方法 sayHi  对象名.方法名()
obj.sayHi();

-------------------------------------------------------------------
//2.利用 new Object 创建对象
var obj = new Object();
//利用 赋值 来添加对象和方法
obj.uname = '张三丰';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
    console.log('hi~');
}

-------------------------------------------------------------------
//3. 利用构造函数创建对象
//function 构造函数名() {
//    this.属性 = 值;
//    this.方法 = function() {}
//}

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, '男'); //调用构造函数必须使用new
ldh.sing('冰雨');

2. 遍历对象

//for in 循环
for (var k in obj) {
    console.log(k);    // k 变量输出 属性名  有方法也可以遍历方法 
    console.log(obj[k]);  // obj[k] 得到的是 属性值
}

3. 内置对象

Math

Date

Array

//1.检测是否为数组
var arr = [];

console.log(arr instanceof Array);
console.log(Array.isArray(arr));

//2.翻转数组
arr.reverse();

//3.数组排序
arr.sort(); //按照字符串排序

arr.sort(function(a,b){
    return a - b;//升序
    return b - a;//降序
});

String

//替换字符  replace
var = 'andyandy'
str.replace('a','b'); // 'bndyandy'  只替换第一个

// 字符转换为数组 split('分隔符')
var str2 = 'red, pink, blue';
str2.split(','); // ['red', 'pink','blue']

//转换大小写
str.toUpperCase();
str.toLowerCase();