Object.keys(xxx)与Object.getOwnPropertyNames(xxx)
Object.keys(xxx)与Object.getOwnPropertyNames(xxx)
注意参数为p和Point.prototype的区别:
1.Object.keys(p)、Object.getOwnPropertyNames(p)
console.log(Object.keys(p)) //['x', 'y'] console.log(Object.getOwnPropertyNames(p)) //['x', 'y']
2.Object.keys(Point.prototype)、Object.getOwnPropertyNames(Point.prototype)
console.log(Object.keys(Point.prototype))
//['fun1', 'z', fun2'] 只有定义在原型prototype上的结果
console.log(Object.getOwnPropertyNames(Point.prototype))
//['constructor', 'add', 'age', 'fun1', 'z', fun2'],包含所有的结果,无论是否顶底在原型prototype上
class Point { constructor(x, y) { this.x = x; this.y = y; } add(a, b) { return a + b } get age() { return this._age; } set age(x) { this._age = x; } } var z = 4; Object.assign(Point.prototype, { fun1() {}, z }); Point.prototype.fun2 = function() {} var p = new Point(1,2); console.dir({}) console.dir(p) //console.log(Object.getOwnPropertyNames()) //必须传参数 // console.log(Object.keys(p.prototype)) // 报错 console.log(Object.keys(p)) //['x', 'y'] console.log(Object.keys(Point.prototype)) //['fun1', 'z', fun2'] console.log(Object.getOwnPropertyNames(Point.prototype)) //['constructor', 'add', 'age', 'fun1', 'z', fun2'] console.log(Object.getOwnPropertyNames(p)) //['x', 'y'] console.log(Object.getOwnPropertyNames(new Point(3,4))) //['x', 'y'] console.log(p.hasOwnProperty("x")) //true console.log(p.hasOwnProperty("y")) //true console.log(p.hasOwnProperty("z")) //false console.log(Point.prototype.hasOwnProperty("z")) // true p.age = 100 console.log(p.age) //使用set age(x){}才能取到值 console.log(p.z) //4
推荐这些文章:
for...of
for...of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句
const array1 = ['a', 'b', 'c'];
for (const element of array1) {
console.log(element);
}
// expected output: "a"
// expected output: "b"
// expected output: "c"
for...in
for...in语句...
let hs={
show(){
console.log("first");
},
render(){
console.log("render");
}
};
console.log(hs);
// Object.prototype.show=function(){
// console.log("111");
// };
hs.__proto__.show=function(){
console.log("111");
};
hs.show();
// Object.prototype.show();
...
判断函数类型 Object.prototype.toString().call
1.判断普通匿名函数
var obj1 = Object.prototype.toString.call( function(){});
console.log(obj1);
console.log(obj1 === '[object Function]');
2.判断异步函数
var obj2 = Object.prototype.toString.call( async function(){});
console.log(obj2);
console.log(obj2 === '[object AsyncFunction]');
&nbs...
[Javascript] Conditional add prop to Object
const b = true
const c = false
let object = {
a: 1,
...(b ? {b: 2}: {}),
...(c ? {c: 3}: {})
};
console.log(object) // { a: 1, b: 2 }
...
vs code 正则代码注释掉所有的console.log输出。
项目正式上线后,需要去掉所有的console.log输出。有专门的工具。
但如果嫌麻烦,可以直接用正则表达式,一行代码注释掉所有的的console.log输出。
搜索内容:(\n\s*)console.log
替换内容:
$1// console.log
大功告成。
...
自定义一些类型
const boolean = true
const string = '这是一个字符串'
const number = 1
const array = []
const object = { name: '张三' }
const functionType = function () {}
const nan = NaN
const undefinedType = undefined
const nullType = null
const Reg = new RegExp()
const set = new Set()
const map = new Map()
const...
1、Object.getOwnPropertyNames()
返回 对象 自身及原型链上所有的属性名的数组
2、Object.keys()
返回 对象 自身及其原型链上可枚举的属性名的数组
3、for (key in object)
与2、Object.keys()相同
4、Ojbect.values()
返回 对象 自身及其原型链上可枚举的属性值的数组
5、for (value of object)
没有实现迭代器(iterable)协议无法会报错
6、Object.entries()
返回 [[属性名,属性值],[属性名,属性值]...] 这样的二维数组
我测试的结果
下面是代码,可拿...
1:定义类和定义构造函数差不多,并且很多特性也和构造函数一致
1 class Person {
2 name = 'tyy'
3 }
4 var p = new Person
5 console.log(p);
6 console.log(p.__proto__);
7 console.log(p.__proto__.__proto__);
8 console.log(p.__proto__ === Person.prototype);
2:类的实例方法,类的访问器方法以及类的静态方法
实例方法:对象点调用,静态方法:类名点调用
1 class P...
1.typeof:
在js中使用typeof只能判断基本数据类型,即number,string,boolean,undefined,object。对于数组函数对象等复杂类型来说,使用typeof都会统一返回object字符串。
2.instanceof:
用来判断a是否为b的实例,表达式为a instanceof b ,要注意的是,instanceof检测的是原型,通俗的说instanceof用来比较一个对象是否为某一个构造函数的实例,注意,instanceof可以准确地判断复杂数据类型,但是不能正确判断基本数据类型。
console.log(12 insta...
背景
工作中经常会用到对象的遍历,现在推荐其中两种常见的方式
let obj = {
a: 1,
b: 2,
c: 3
}
方式1(for...in...)常用于普通遍历
// 1. for...in...
for(let key in obj){
console.log(key, obj[key]);
}
// a 1
// b 2
// c 3
方式2 (Obje...
文章链接:https://www.dianjilingqu.com/51586.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。