javaScript常见输出方式( 六 )


获取对象类型
let arr = new Array();console.log(arr);// console.log(typeof arr); // objectconsole.log(arr.constructor.name); // Array
关键字
用于判断 “对象” 是否是指定构造函数的 “实例”
注意点
? 只要 构造函数的原型对象 出现在实例对象的原型链中都会返回true
属性
用于判断 一个对象是否是另一个对象的原型
注意点
? 只要调用者在传入对象的原型链上都会返回true
判断对象属性
in的特点: 只要类中或者原型对象中有, 就会返回true
.log(“name” in p); // true
判断某一个对象自身是否拥有某一个属性
.log(p.(“name”));
/特点: 只会去类中查找有没有, 不会去原型对象中查找
对象增删改查
增加?
// p.name = "lnj";p["name"] = "zs";
删除?
// delete p.name;// delete p["name"];
修改(U)
// p.name = "lnj";// p["name"] = "ww";
查询(D)
// console.log(p.name);// console.log(p["name"]);
对象遍历
在JS中可以通过高级for循环来遍历对象
? 以下代码的含义: 将指定对象中所有的属性和方法的名称取出来了依次的赋值给key这个变量
for in
主要用于遍历对象的可枚举属性,包括自有属性、继承自原型的属性
.keys
此方法返回一个数组,元素均为对象自有可枚举的属性
.
此方法用于返回对象的自有属性,包括可枚举和不可枚举的属性
深拷贝和浅拷贝
深拷贝
? 修改新变量的值不会影响原有变量的值
? 默认情况下基本数据类型都是深拷贝
浅拷贝
? 修改新变量的值会影响原有的变量的值
? 默认情况下引用类型都是浅拷贝
深拷贝的方法 JSON转换
var targetObj = JSON.parse(JSON.stringify(copyObj))let arr4 = JSON.parse(JSON.stringify(arr))
缺点:
(1)如果对象里有函数,函数无法被拷贝下来
(2)无法拷贝对象原型链上的属性和方法
(3)当数据的层次很深,会栈溢出
递归拷贝
function deepCopy(target,source) {// 1.通过遍历拿到source中所有的属性for(let key in source){// 2.取出当前遍历到的属性对应的取值let sourceValue = http://www.kingceram.com/post/source[key];// 3.判断当前的取值是否是引用数据类型if(sourceValue instanceof Object){//获取当前值的对象构造函数名同时new给当前的keylet subTarget = new sourceValue.constructortarget[key]=subTarget//递归进行拷贝deepCopy(subTarget,sourceValue)}else{target[key]=sourceValue}}}
字符串常用方法 (x)
/*charAt() 方法从一个字符串中返回指定的字符 。参数:index:一个介于0 和字符串长度减1之间的整数 。(0~length-1)返回值:返回查询到的字符找不到返回的是空字符串而不是undefined或者是对应的编码值*/str.charAt(index)
2. (x)
/*charCodeAt:获取指定支付的ASCII码值(Unicode编码值)参数:n[number]获取字符指定的索引返回值:返回查找到的字符找不到返回的是空字符串而不是undefined或者是对应的编码值*/str.charCodeAt(index)
3. (str1,str2)
/*concat() 方法将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回 。参数:string2...stringN和原字符串连接的多个字符串返回值:新的字符串*/str.concat(string2, string3[, ..., stringN])
4. ()