作用域
1.js作用域分为两种:
1)全局作用域:全局可以访问
2)局部作用域:函数中用var声明的变量,就是局部作用域,外部不能访问
数据类型
1.js数据类型分为两种:
1)基础数据类型:
string number boolean undefined null
2)复杂数据类型
object array data RegExp
类型检测
1)typeof
对于基本类型,除null以外,均可以返回正确的结果
对于引用类型,除function以外,一律返回object类型
对于null,返回object类型
对于function返回function类型
2)instanceof 判断是否是某个构造函数的实例
不能检测简单数据类型
只能检测复杂数据类型
举例:
console.log("数字", 10 instanceof Number) console.log("布尔", true instanceof Boolean) console.log("字符串", "" instanceof String) console.log("对象", {} instanceof Object) console.log("函数", function(){} instanceof Function) console.log("数组", [] instanceof Array)
3)constructor判断构造函数
举例:
console.log("数字", (10).constructor == Number) console.log("字符串", ('你好').constructor == String) console.log("布尔", (true).constructor == Boolean) console.log("对象", ({}).constructor == Object) console.log("数组", ([]).constructor == Array) console.log("函数", (function () { }).constructor == Function)
4)tostring
举例:
Object.prototype 原型对象 __proto__ 原型 console.log("数字",Object.prototype.toString.call(1)) console.log("字符串",Object.prototype.toString.call("")) console.log("布尔",Object.prototype.toString.call(true)) console.log("对象",Object.prototype.toString.call({})) console.log("数组",Object.prototype.toString.call([])) console.log("函数",Object.prototype.toString.call(function(){}))
构造函数、原型对象和实例化对象的关系
实例化对象可以通过_proto获取到原型对象
类型转换
1.显示类型转换
1)转换为字符串:toString() String
2)转换为数值:Number() parseint() parseFloat()
3)转换为布尔值:Boolean()
4)转换为对象:Object()
2.隐式类型转换
1)减号,乘号,除号,取模...
减号、乘号、除号、取模等操作符是比较单纯的操作符。 这些操作符会尝试将他们的操作数转换为数字(使用Number()
),如果操作数没法转换为数字的话,他们的结果就是NaN
2)大于、小于、大于等于、小于等于
当两个操作数均是字符串的时候,它会执行大家熟悉的字符串比较,即从左到右依次比较每一个字符的ASCII码,若出现符合操作符的情况,则返回true
,否则返回false
。 无法将操作数转换为数字的情况下总是返回false
。
3)==、!=
这两个运算符在大部分上面都是与(一)相同的,不同的是:
字符串 op 字符串:不会进行类型转换,直接比较。
对象 op 对象:引用都指向同一个对象才为true
。
4)加号(+)
当没有特别指定的时候参考(一),比如对象+对象等,但有如下几种例外情况:
字符串 + 字符串:进行字符串拼接操作。
字符串 + 其他:将其他转换为字符串,并进行拼接操作。
运算符
1.四则运算符+ - * / %
2.逻辑运算符 与或非 || && !
条件控制
if和三元表达式
switch的使用
this的指向
普通函数
function demo(){ }
匿名函数 window
let fn=function(){}
立即执行函数
(function(){ })()
回调函数
function print(callback) { callback(); }
创建回调函数
const message = function() { console.log("This message is shown after 3 seconds"); } setTimeout(message, 3000); setInterval(message,1000)
箭头函数 ES6
箭头函数不绑定this关键字,箭头函数中的this,指向的是函数定义位置的上下文this
var obj = { uname: "张三", age: 21 } function fn() { console.log(this,"外层函数") return () => { console.log(this,"箭头函数") } }
this指向总结
函数类型 | this的指向 |
---|---|
普通函数 | 指向window |
匿名函数 | 指向window |
立即执行函数 | window |
回调函数 | window |
箭头函数 | 函数定义位置的上下文this |
对象下的函数 | 谁调用,指向谁 |
dom回调 | 绑定事件的对象 |