判断数据类型
1.typeof
问题:只能检测基本数据类型(不包括 null)
2.constructor
语法:数据机构.constructor
问题:null 和 undefined 不能使用
使用场景:一般用于引用数据类型
潜在问题: 这是一个原型对象的某一个属性, 我们可以手动更改
例: console.log([].constructor )
console.log(null.constructor === Array)
console.log(undefined.constructor === Array)
console.log({}.constructor === Array)
3.Object.prototype.tiString.call(要检测的数据类型)
返回值: [Object 数据类型](返回值是字符串格式的, 并且数据类型的首字母是大写)
使用场景: 在任意类型都可准确判断, 所以大部分情况下都可以使用
例: console.log(Object.prototype.toString.call([]))
console.log(Object.prototype.toString.call({}))
console.log(Object.prototype.toString.call(null))
ES6 类的语法
1.构造函数 不加 new 也能使用, 只是没有意义
2.构造函数与原型上的内容 需要分开写
例: ES6 的书写
class Fn {
constructor (name,age) {
this.name = name
this,age = age
}
fn1 () {
console.log('我是 原型 上的 fn1 方法')
}
fn2 () {
console.log('我是 原型 上的 fn2 方法')
}
}
const p1 = new Fn ('彭于晏', 41)
console.log(p1)
p1 fn1()
console.log(p1.__proto__)
ES6 补充
1.模板字符串
在 ES5 中要么是 单引号包裹,要么是双引号包裹
而 ES6 中推出的 模板字符串是 使用 `` 反双引号包裹的
和之前的区别
1.反引号能够换行, 但是单引号双引号不行
2.内部如果书写的有 ${} 然后在内部可以识别出变量
2.展开运算符
在 ES6 推出了展开运算符 ...
能够展开 数组 和 对象
例: let arr = [1, 2, 3]
console.log(...arr)
2.1合并数组
例:
let arr = [1, 2, 3, 4]
let arr2 = [...arr, 25, 56, 99]
console.log(arr2)
2.2函数传参
例:
let arr = [1, 2, 3, 4]
function fn (a, b, c, d) {
console.log('fn 函数的 形参:', a, b, c, d)
}
fn(arr[0], arr[1], arr[2], arr[3])
fn(...arr)
2.3展开对象
例:
let obj = {
a: 1,
b: 2
}
let obj2 = {
...obj,
c: 52,
d: 99
}
console.log(obj2)
3. 简写对象中的函数
let obj = {
a: 1,
b: 2
}
let obj2 = {
...obj,
fn:function(){
console.log('我是对象 obj2 属性fn 的属性值')
},
fn1(){
console.log('我是 fn 函数的简写')
}
}
obj2.fn()
obj2.fn1()