JavaScript[ LXF教程(一) ]

本文详细梳理了JavaScript的基础知识,包括变量类型、比较运算、严格模式、字符串处理、数组和对象操作、作用域和闭包,以及高级特性如箭头函数、高阶函数和ES6新特性。特别关注了命名冲突解决、this指向和作用域控制。
摘要由CSDN通过智能技术生成

本文主要根据廖雪峰的官方网站梳理知识点,JavaScript全栈教程

小的知识点那不能放过哟

  • HTML引入js文件: <script src="./main.js"></script>

  • Number: 不区分整数与浮点数,NaN(not a number),Infinity(无限大)

  • NaN === NaN(false) isNaN(NaN); //true

  • null是表示空的值,’'表示长度为0的字符串

  • ==与===: 前者先进行数据类型转换再比较,后者直接比较。
    [ eg. 2 == ‘2’(true); 2===‘2’(false) ]

  • 浮点数的相等比较:浮点数在运算过程中会产生误差,因为计算机无法精确表示无限循环小数,所以不能直接比较,需要通过计算两者差的绝对值是否小于某阈值:
    1/3 === (1-2/3) //false
    Math.abs(1/3 - (1-2/3)) < 0.0000001; //true

  • strict模式:‘use strict’; 在该模式下如果变量声明没有var就报错,一般没有var会自动识别为全局变量。

字符串

  • 多行字符串除了\n还可以直接用``反引号表示。
  • 不能通过索引赋值改变字符串。
  • ES6模板字符串: eg. var message = `你好, n a m e , 你 今 年 {name},你今年 name{age}岁了`;
  • 字符串常见操作:str.length; str.toUpperCase(); str.toLowerCase();
    str.indexOf(‘world’); str.substring(0,5); str.split(’’)

数组

  • 数组常用函数:arr.indexOf(value); arr.slice(0,2); arr.push()/pop();
    arr.shift()/unshift(); arr.sort(); arr.reverse(); arr1.concat(arr2);
    arr.splice(); arr.join(’-’);

对象

  • 对象:判断是否含有某属性:obj.hasOwnProperty(‘prop’); //true or false
  • 对象属性循环:for(var key in obj); 再通过obj.hasOwnProperty(key)过滤掉父属性

(续)

  • 键盘输入: eg. var height = parseFloat(prompt(‘请输入身高(m):’));
  • Map和set: 一组键值对结构和一组key的集合
  • for(var x of Iterable(arr/set/map))
    优势:只循环集合本身的元素(值),而in遍历的是对象的所有属性(包括索引)。
  • forEach函数:iter.forEach(function () {}); 参数:arr: element, index, arr;
    Set: element, sameElement, set;
    Map: value, key, map [也可以只获得element]
  • arguments: 可以获得调用者传入的所有参数,类似Array,最常用于判断传入参数的个数(arguments.length)
    在这里插入图片描述
  • rest: eg. foo(a, b, … rest)表示除a,b之外的参数以数组形式交给rest。
    在这里插入图片描述加油吧~

作用域

  • 作用域链

  • 不同的JS文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,就会造成命名冲突。
    解决方法之一就是只声明一个全局变量,把所有的变量和函数绑定到这个全局变量中。
    在这里插入图片描述

  • this

    this指向的对象视情况而定,在全局中定义函数getAge()。如果是xiaoming.age(),this指向 xiaoming;如果是单独调用函数,则指向全局对象window。
    var fn = xiaoming.age;
    fn(); //这么写也不行!!

    报错:this只在age方法的函数内指向小明,这样this又指向undefined(非strict模式下指向window)List item
    解决方法:var that = this;先用that捕获this,便可以在方法内部定义其他函数。
    在这里插入图片描述

  • for(var i=0; i < 100; i++)中的i即使在循环外面也可以使用;为了解决这个问题,ES6引入了let,用let替代var可以声明一个块级作用域的变量。

(续)

  • 常量:const

  • 变量提升:JS的函数定义有一个特点,先扫描整个函数语句,把所有变量声明“提升”到函数顶部。(注意:只是声明,而不提升赋值)

  • 解构赋值:从ES6开始引入,可同时对一组变量进行赋值:
    减少代码量 eg. var [x,y,z] = [‘a’,‘b’,‘c’];
    从一个对象获取若干属性:
    var {name,age,sex} = person;
    交换x和y的值:
    [x,y] = [y,x];

  • apply:两个参数:一个是this指向的变量,一个是Array,表示函数本身的参数。 xiaoming.age(); 等价于 getAge.apply(xiaoming, []); 利用apply可以动态改变函数的行为:
    在这里插入图片描述

  • call: 唯一的区别是apply()将参数打包成数组,而call()直接将参数按顺序传入。

    在这里插入图片描述

高阶函数

  • 让函数的参数可以接收别的函数。

  • map(): 返回一个新的数组,数组的元素为原始数组被调用函数处理后的值。 在这里插入图片描述

  • reduce(): 接受一个函数作为累加器,返回最终计算的值。 在这里插入图片描述

  • filter(): 把Array的某些元素过滤掉,然后返回剩下的元素。

    去重:indexOf返回的是元素的第一个位置在这里插入图片描述
    查素数:
    在这里插入图片描述

  • sort(arr): 排序时会先把数组中的元素转换成字符串;

    实现数字排序:
    在这里插入图片描述
    忽略大小写的排序:
    在这里插入图片描述
    注意:sort()会直接对Array进行修改,它返回的结果还是当前Array。

  • 一些好用的高阶函数:

    every():返回布尔值,如果所有元素满足条件,则为true;反之为false。
    find(): 返回符合条件的第一个元素,没有返回undefined。
    findIndex(): 返回符合条件的第一个元素的索引,无则返回-1。
    forEach():遍历数组,不返回值。
    在这里插入图片描述

闭包

  • var i, let i 和 隐匿函数)

箭头函数

generator(生成器):

  • function* a(x) {
    yield x;
    yield x+1;
    return;
    }
    var f = a(5);
    f.next(); //value:5, done:false
    f.next(); //value:6, done:false
    f.next(); //value:undefined, done: true
    done为true表示generator执行完毕。
    还可以用for…of…: for(var x of a(5))

    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值