函数与Symbol
一, 数字类型的用法
(1).传统写法
console.log(isNaN(2.5));//false
console.log(window.isNaN(2.5));//false
(2).Number.isNaN函数 (先判断是否是数字类型)
console.log(Number.isNaN(NaN));//true
console.log(Number.isNaN(false));//false
console.log(Number.isNaN(null));//false
(3).Number.parseInt函数:解析一个字符串,返回一个整数
console.log(Number.parseInt('3.123'));//3
console.log(Number.parseInt(null));//NaN
console.log(Number.parseInt(undefined));//NaN
console.log(Number.parseInt(3));//3
(4).Number.isInteger函数:用来判断是否是整数。不会发生隐式类型转换
console.log(Number.isInteger(1.23)); //false
console.log(Number.isInteger(2));//true
(5). Math.trunc函数:用于去除一个数的小数部分,返回整数部分。 会发生隐式类型转换
console.log(Math.trunc(1.2334));//1
console.log(Math.trunc(null));//0
console.log(Math.trunc(true));//1
console.log(Math.trunc(undefined));//NaN
(6).Math.sign函数:用来判断一个数到底是正数(1)、负数(-1)、还是零(0)。
console.log(Math.sign(null));//0
console.log(Math.sign(true));//1
console.log(Math.sign(undefined));//NaN
二,对象的使用
1、对象中属性名和属性值一样省略属性值
2、在对象中的函数可以省略:function
3、表达式可以作为对象中的属性
var name = 'zs'
var first = 'first'
var name = 'name'
var obj = {
name,
age: 18,
say() {
console.log(this);//{name: 'name', age: 18, firstname: 'first', say: ƒ}
console.log('会说话');
},
[first + name]: 'first'
}
console.log(obj.firstname);//first
console.log(obj[first + name]);//first
console.log(obj[name]);//name
obj.say()//会说话
1.Object.is函数 函数的作用:比较两个值是否严格相等,或者说全等。===
console.log(Object.is(10, '10'));//false
console.log(Object.is(NaN, NaN));//true
2. Object.assign(目标对象,源对象,源对象)函数 函数作用:将源对象的属性赋值到目标对象上。(重点)
var obj1 = {
a: 1,
b: 2
}
var obj2 = {
c: 3,
d: 4
}
console.log(Object.assign(obj1, obj2));//a:1, b: 2,c: 3,d: 4
// 对象的深拷贝
var object = Object.assign({}, obj)
object.name = 'object'
console.log(obj);//{name: 'name', age: 18, firstname: 'first', say: ƒ}
console.log(object)//{name: 'object', age: 18, firstname: 'first', say: ƒ}
3. Object.getPrototypeOf函数 函数作用:获取一个对象的prototype属性。
function Person() {
}
Person.prototype.name = 'person'
Person.prototype.age = 28
var p1 = new Person()
console.log(Object.getPrototypeOf(p1));//Object
4、Object.setPrototypeOf(实例化对象,{})函数 函数作用:设置一个对象的prototype属
Object.setPrototypeOf(p1, {
name: 'name',
say() {
console.log('会耍滑');
}
})
console.log(Object.getPrototypeOf(p1));//Object
5. Object.values() 获取对象的属性值 Object.keys() 获取对象的属性名
console.log(Object.values(obj));//['name', 18, ƒ, 'first']
console.log(Object.keys(obj));//['name', 'age', 'say', 'firstname']
三,函数的使用
function fn(name) {
var name = name || 'zs'
console.log(name);
}
fn()//zs
fn('zs')//zs
fn(false)//zs
fn(true)//ture
fn(null)//zs
fn(undefined)//zs
fn(0)//zs
fn('')//zs
赋初值
function fn1(name) {
console.log(name);//ls
}
fn1('ls')
四,rest参数
function fn(x, ...rest) {
console.log(...rest);//2,3,4,5
console.log(x);//1
console.log(arguments[1]);//2
}
fn(1, 2, 3, 4, 5);
五,扩展运算符
1、遍历数组
var arr = [1, 2, 3, 4]
console.log(...arr);//1,2,3,4
2,当做数组中的元素
var arr_1 = [1, ...arr, 5]
console.log(arr_1);//Array(6)
3,数组的深拷贝 (重点)
var arr_2 = [...arr]
arr_2.unshift(0)
console.log(arr_2);
console.log(arr);
4.函数中的参数
function fn(x, y, z, m) {
console.log(x, y, z, m);//1 2 3 4
}
fn(...arr)
5.与解构赋值连用
var [x, y, z, m] = [...arr]
console.log(x, y, z, m);//1 2 3 4
6.遍历对象
var obj = {
name: 'zs',
age: 18,
say() {
console.log('话');
}
}
console.log({ ...obj });//Object
// 深拷贝
var obj_1 = { ...obj }
obj_1.name = 'obj_1'
7.合并对象
var obja = {
a: 1,
b: 2
}
var objb = {
c: 3,
d: 4,
...obja,
a: 5,
}
console.log(objb);//{c: 3, d: 4, a: 5, b: 2}