浅谈从Vue.js源码中我学到了精妙方法

立即执行函数

页面加载完成后只执行一次的设置函数。


  1. (function (a, b) { 
  2.   console.log(a, b); // 1,2 
  3. })(1, 2); 

通常,全局变量被作为一个参数传递给立即执行参数,这样它在函数内部不使用window也可以被访问到。


  1. (function (global) { 
  2.   console.log(global); // Window对象 
  3. })(this); 

多层嵌套三目运算符

三目运算符嵌套的写法,使得代码可读性差,简单业务场景下可以试着使用。


  1. var a = 1; 
  2. var b = 0; 
  3. a == 1 ? (b == 2 ? (b = 3) : (b = 1)) : ""
  4. console.log(b); // 1 

冻结对象

不可对指定对象增删改。


  1. var emptyObject = Object.freeze({ 
  2.   key"1"
  3. }); 
  4. emptyObject.name = "maomin"
  5. delete emptyObject.key
  6. emptyObject.key = "2"
  7. console.log(emptyObject); 

密封对象

只能对指定对象进行更改,不可进行增加删除操作。


  1. var sealObject = Object.seal({ 
  2.   key: 3, 
  3. }); 
  4. sealObject.name = "maomin"
  5. delete sealObject.key
  6. sealObject.key = 4; 
  7. console.log(sealObject); // 4 

检查是否是原始值


  1. function isPrimitive(value) { 
  2.   return ( 
  3.     typeof value === "string" || 
  4.     typeof value === "number" || 
  5.     // $flow-disable-line 
  6.     typeof value === "symbol" || 
  7.     typeof value === "boolean" 
  8.   ); 

快速检测是否是对象

当我们知道原始值时,它主要用于将对象与原始值区分开来。


  1. function isObject(obj) { 
  2.   return obj !== null && typeof obj === "object"
  3. console.log(isObject(true)); //false 

检测目标类型


  1. var _toString = Object.prototype.toString; 
  2.  
  3. function toRawType(value) { 
  4.   return _toString.call(value).slice(8, -1); 
  5. console.log(toRawType([])); // Array 

检查目标是否是有效的数组索引


  1. function isValidArrayIndex(val) { 
  2.   var n = parseFloat(String(val)); 
  3.   return n >= 0 && Math.floor(n) === n && isFinite(val); 

检测是否是Promise对象

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章