判断数据类型
1.typeof
- 问题:只能检测基本数据类型
2.constructor
- 语法:
数据结构.constructor - 问题:null和 undefined不能使用
- 使用场景:一般用于引用数据类型
- 潜在问题:这个原型对象的,某一个属性,我们是可以手动更改的
3.Object.prototype.toString.call (要检测的数据)
- 返回值:
[object 数据类型](字符串格式的,并且数据类型的首字母是大写) - 使用场景:任意类型都可准确判断,所大部分情况下都可以使用
console.log(Object.prototype.toString.call([])) //[object Array]
console.log(Object.prototype.toString.call({})) //[object Object]
console.log(Object.prototype.toString.call(null)) //[object Null]
console.log(Object.prototype.toString.call(undefined)) //[object Undefined]
console.log(Object.prototype.toString.call('')) //[object String]
console.log(Object.prototype.toString.call(123)) //[object Number]
ES6 类的语法
ES5 构造函数的问题:
- 1.构造函数不加 new 也能使用,只是没有意义
- 2.构造函数与原型上的内容,需要分开书写
// ES6 类的书写
class Stu {
// 构造器,类似于ES5 构造函数的函数体
constructor(num) {
this.name = '张三'
this.age = num
}
// 接下来的位置全都是原型的书写位置
init() {
console.log('我是原型上的init方法')
}
abc() {
console.log('我是原型上的abc方法')
}
move() {
console.log('我是原型上的move方法')
}
}
const s1 = new Stu(18)
console.log(s1)
const s2 = new Stu(168)
console.log(s2)
s1.init()
s2.move()
ES6 补充
模板字符串
-
在ES5中要么是单引号包裹要么是双引号包裹
-
而ES6中推出的模板字符串是使用
``反引号包裹的
和之前的区别
-
1.反引号能够换行,但是单引号双引号不行
-
2.内部如果书写的有
${}然后在内部可以识别出变量
展开运算符
在 ES6 推出了展开运算符 ...能够展开数组或者对象
let arr = [1, 2, 3]
console.log(arr) //[1, 2, 3]
console.log(...arr) //1 2 3
// 2.1合并数组
let arr2 = [...arr, 100, 101, 102]
console.log(arr2) //[1, 2, 3, 100, 101, 102]
// 2.2函数传参
function fn(a, b, c) {
console.log(a, b, c) //1 2 3
}
// fn(arr[0], arr[1], arr[2])
fn(...arr)
// 2.3展开对象
let obj = {
a: 1,
b: 2
}
// console.log(...obj) //这个代码不符合语法规范
let obj2 = {
...obj,
c: 100,
d: 200
}
console.log(obj2) //{a: 1, b: 2, c: 100, d: 200}
对象简写语法
- 1.当对象的key与value相同的时候,并且value是一个变量,那么可以省略其中一个不写
- 2.函数简写
let name = '张三'
let obj = {
// name: '张三'
// name: name
name,
fn: function () {
console.log('我是对象obj属性fn的属性值')
},
// 简写
fn1() {
console.log('我是fn1函数')
}
}
console.log(obj)
obj.fn()
obj.fn1()