JavaScript学习-第1天

快速入门

让JavaScript引擎自动加分号在某些情况下会改变程序的语义,导致运行结果与期望不一致。所以一般不取消分号。

数据类型
  • Number
    • 数字类型,不区分浮点型和整形
    • 不同进制,前面添加相应标志,例如:16进制,0xff00;
  • 字符串
    • 多行字符串:使用反引号`来匹配一个多行字符串
    • 字符串格式化:ES6:${变量名},旧版本:’’ + 变量 + ‘’
    • 常用属性:length
    • 常用方法:toUpperCase、toLowerCase、indexOf、substring
  • 布尔值
比较运算符
  • 需要注意的地方
    • ==,它会自动转换数据类型再比较
    • ===,它不会自动转换数据类型,如果数据类型不一致,返回false,如果一致,再比较。
    • NaN和任何值都不相等
null表示一个空的值,而undefined表示值未定义
数组
  • 直接给Array的length赋一个新的值会导致Array大小的变化
  • 如果通过索引赋值时,索引超过了范围,同样会引起Array大小的变化
  • 复制数组可以使用
b = a.slice()
  • 末尾添加去除元素 push和pop
  • 头部添加去除元素 unshift和shift
  • splice( a, b, … )方法是修改Array的“万能方法”,它可以从指定的索引(a)开始删除若干元素(b个),然后再从该位置添加若干元素
  • concat( 需要添加的数组 )方法把当前的Array和另一个Array连接起来,并返回一个新的Array,此方法默认去除嵌套数组
  • join( ‘符号’ ),把当前Array的每个元素都用指定的字符串连接起来,然后返回连接后的字符串
  • 常用属性:length
  • 常用方法:indexOf、push和pop、unshift和shift、(sort、reverse、splice、原地修改)(concat、join、slice、返回新数组或字符串
对象
  • 键-值组成的无序集合
  • 要获取一个对象的属性,用对象.属性或者对象[属性]
  • 变量名是大小写英文、数字、$和_的组合,且不能用数字开头。申明一个变量用var语句
  • 如果我们要检测一个对象是否拥有某一属性,可以用in操作符,(注:包括了继承过来的属性)
  • 要判断一个属性是否是一个对象自身拥有的,而不是继承得到的,可以用hasOwnProperty()方法
strict模式
  • 如果不使用var 声明变量,默认为全局变量
  • 启用strict模式的方法是在JavaScript代码的第一行写上:
'use strict';

在strict模式下运行的JavaScript代码,强制通过var申明变量,未使用var申明变量就使用的,将导致运行错误,此外如果this指向window对象,变为undefined。

条件判断
  • JavaScript把null、undefined、0、NaN和空字符串’'视为false,其他值一概视为true
循环
  • for-in 循环,要过滤掉对象继承的属性,用hasOwnProperty()来实现:
  • 由于Array也是对象,而它的每个元素的索引被视为对象的属性,因此,for … in循环可以直接循环出Array的索引(得到的是String而不是Number),值需要加Array对象[key]。
Map和Set(ES6标准新增的数据类型)
  • 初始化Map需要一个二维数组,或者直接初始化一个空Map。var m = new Map()。
    • map方法:set、get、has、delete。多次对一个key放入value,后者生效
  • 要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set。
    • set方法:add、delete。
  • 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引入了新的iterable类型,Array、Map和Set都属于iterable类型。
  • 具有iterable类型的集合可以通过新的for … of循环来遍历。

函数(上)

  • arguments,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数
  • rest参数只能写在最后,前面用…来标识,rest参数接受比函数指定参数多的参数
  • JavaScript的函数定义有个特点,它会先扫描整个函数体的语句,把所有申明的变量“提升”到函数顶部,相当于提前声明,所以在函数内部首先申明所有变量
  • 不在任何函数内定义的变量就具有全局作用域。实际上,JavaScript默认有一个全局对象window,全局作用域的变量实际上被绑定到window的一个属性,JavaScript实际上只有一个全局作用域。
名字空间
  1. 全局变量会绑定到window上,不同的JavaScript文件如果使用了相同的全局变量,或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现。

  2. 减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中。

局部作用域
  • 由于JavaScript的变量作用域实际上是函数内部,我们在for循环等语句块中是无法定义具有局部作用域的变量的
  • 为了解决块级作用域,ES6用let替代var可以申明一个块级作用域的变量
常量
  • ES6const来定义常量
  • 旧版本使用var 大写变量来代替常量
解构赋值
  • 从ES6开始,JavaScript引入了解构赋值,可以同时对一组变量进行赋值。
  • 对数组元素进行解构赋值时,多个变量要用[…]括起来,还可以忽略某些元素(但是要使用逗号占位),使用对象属性也可以进行对象解析(注意:此时需要使用{}
方法
  • 在一个对象中绑定函数,称为这个对象的方法。
  • 以对象的方法形式调用,该函数的this指向被调用的对象。单独调用函数,该函数的this指向全局对象,也就是window。
  • 用var that = this;,就可以放心地在方法内部定义其他函数。
  • 要指定函数的this指向哪个对象,可以用函数本身的apply方法,它接收两个参数,第一个参数就是需要绑定的this变量,第二个参数是Array,表示函数本身的参数。
  • call()与apply()类似。
    • apply()把参数打包成Array再传入;
    • call()把参数按顺序传入。

转载来源:廖雪峰老师的JavaScript教程,个人简单整理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值