返回顶部
首页 > 资讯 > 前端开发 > node.js >从Vue.js源码中学到的方法有哪些
  • 179
分享到

从Vue.js源码中学到的方法有哪些

2024-04-02 19:04:59 179人浏览 泡泡鱼
摘要

本篇内容介绍了“从vue.js源码中学到的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!立即执行

本篇内容介绍了“从vue.js源码中学到的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

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

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

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

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

多层嵌套三目运算

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

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

冻结对象

不可对指定对象增删改。

var emptyObject = Object.freeze({   key: "1", }); emptyObject.name = "maomin"; delete emptyObject.key; emptyObject.key = "2"; console.log(emptyObject);

密封对象

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

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

检查是否是原始值

function isPrimitive(value) {   return (     typeof value === "string" ||     typeof value === "number" ||     // $flow-disable-line     typeof value === "symbol" ||     typeof value === "boolean"   ); }

快速检测是否是对象

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

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

检测目标类型

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

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

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

检测是否是Promise对象

function isDef(v) {   return v !== undefined && v !== null; } function isPromise(val) {   return (     isDef(val) &&     typeof val.then === "function" &&     typeof val.catch === "function"   ); } var promiseObj = new Promise(function (resolve, reject) {   // 一段耗时的异步操作   resolve("成功"); // 数据处理完成   // reject('失败') // 数据处理出错 }).then(   (res) => {     console.log(res);   }, // 成功   (err) => {     console.log(err);   } // 失败 ); console.log(isPromise(promiseObj)); // true

目标转换为字符串

var _toString = Object.prototype.toString; function isPlainObject(obj) {   return _toString.call(obj) === "[object Object]"; } function toString(val) {   return val == null     ? ""     : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)     ? JSON.stringify(val, null, 2)     : String(val); } console.log(toString({ name: 1 })); // {"name": 1}

转化为数字

将输入值转换为数字以便持久化。如果转换失败,则返回原始字符串

function toNumber(val) {   var n = parseFloat(val);   return isNaN(n) ? val : n; }

检测key是否在创建的Map对象内

function makeMap(str, expectsLowerCase) {   var map = Object.create(null);   var list = str.split(",");   for (var i = 0; i < list.length; i++) {     map[list[i]] = true;   }   return expectsLowerCase     ? function (val) {         return map[val.toLowerCase()];       }     : function (val) {         return map[val];       }; } var isbuiltInTag = makeMap("slot,component", true); console.log(isbuiltInTag("component")); // true

删除简单数组中某一项

function remove(arr, item) {   if (arr.length) {     var index = arr.indexOf(item);     if (index > -1) {       return arr.splice(index, 1);     }   } } console.log(remove([1, 2], 1)); // [1]

检测对象中是否有指定key

var hasOwnProperty = Object.prototype.hasOwnProperty; function hasOwn(obj, key) {   return hasOwnProperty.call(obj, key); } console.log(hasOwn({ name: 1 }, "name")); //true

将类数组对象转化为真实数组

function toArray(list, start) {   start = start || 0;   var i = list.length - start;   var ret = new Array(i);   while (i--) {     ret[i] = list[i + start];   }   return ret; } console.log(toArray({ 0: 42, 1: 52, 2: 63, length: 3 })); // [42, 52, 63]

将属性混合到目标对象中

function extend(to, _from) {   for (var key in _from) {     to[key] = _from[key];   }   return to; } console.log(extend({ name: 1 }, { name1: 2 })); // {name:1,name1:2}

将对象数组合并为单个对象

function extend(to, _from) {   for (var key in _from) {     to[key] = _from[key];   }   return to; } function toObject(arr) {   var res = {};   for (var i = 0; i < arr.length; i++) {     if (arr[i]) {       extend(res, arr[i]);     }   }   return res; } console.log(toObject([{ name: 1 }, { name: 1 }, { name: 2 }, { name1: 3 }])); // {name: 2, name1: 3}

检测指定项在数组(简单数组、数组对象)中的索引

function isObject(obj) {   return obj !== null && typeof obj === "object"; } function looseEqual(a, b) {   if (a === b) {     return true;   }   var isObjectA = isObject(a);   var isObjectB = isObject(b);   if (isObjectA && isObjectB) {     try {       var isArrayA = Array.isArray(a);       var isArrayB = Array.isArray(b);       if (isArrayA && isArrayB) {         return (           a.length === b.length &&           a.every(function (e, i) {             return looseEqual(e, b[i]);           })         );       } else if (a instanceof Date && b instanceof Date) {         return a.getTime() === b.getTime();       } else if (!isArrayA && !isArrayB) {         var keysA = Object.keys(a);         var keysb = Object.keys(b);         return (           keysA.length === keysb.length &&           keysA.every(function (key) {             return looseEqual(a[key], b[key]);           })         );       } else {                  return false;       }     } catch (e) {              return false;     }   } else if (!isObjectA && !isObjectB) {     return String(a) === String(b);   } else {     return false;   } }  function looseIndexOf(arr, val) {   for (var i = 0; i < arr.length; i++) {     if (looseEqual(arr[i], val)) {       return i;     }   }   return -1; } console.log(looseIndexOf([{ name: 1 }, { name: 2 }], 4)); // -1 console.log(looseIndexOf([{ name: 1 }, { name: 2 }], { name: 1 })); // 0

确保函数只调用一次

function once(fn) {   var called = false;   return function () {     if (!called) {       called = true;       fn.apply(this, arguments);     }   }; } var callOnce = once(function () {   console.log("javascript"); }); callOnce(); // javascript callOnce();

定义对象属性

如果你想禁止一个对象添加新属性并且保留已有属性,就可以使用Object.preventExtensions(obj)。

function def(obj, key, val, enumerable) {   Object.defineProperty(obj, key, {     value: val, // 对象定义属性     enumerable: !!enumerable, // 描述属性是否会出现在for in 或者 Object.keys()的遍历中     writable: true, // 是否可写     configurable: true, // 是否重新定义或者删除   }); } var obj = {   name: 1, }; def(obj, "name1", 2, true); obj.name1 = 3; console.log(obj); // {name: 1, name1: 3}

浏览器环境嗅探

var inBrowser = typeof window !== "undefined"; var inWeex = typeof WXEnvironment !== "undefined" && !!WXEnvironment.platfORM; var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase(); var UA = inBrowser && window.navigator.userAgent.toLowerCase();  var isIE = UA && /msie|trident/.test(UA); var isIE9 = UA && UA.indexOf("msie 9.0") > 0; var isEdge = UA && UA.indexOf("edge/") > 0; var isAndroid = (UA && UA.indexOf("android") > 0) || weexPlatform === "android"; var isiOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || weexPlatform === "ios"; var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; var isPhantomjs = UA && /phantomjs/.test(UA); var isFF = UA && UA.match(/firefox\/(\d+)/);

JS构造函数内的方法与构造函数prototype属性上方法的对比

定义在构造函数内部的方法,会在它的每一个实例上都克隆这个方法;定义在构造函数的  prototype  属性上的方法会让它的所有示例都共享这个方法,但是不会在每个实例的内部重新定义这个方法。如果我们的应用需要创建很多新的对象,并且这些对象还有许多的方法,为了节省内存,我们建议把这些方法都定义在构造函数的  prototype 属性上。当然,在某些情况下,我们需要将某些方法定义在构造函数中,这种情况一般是因为我们需要访问构造函数内部的私有变量。

function A() {   this.say = function () {     console.log(1);   }; } var a = new A(); a.say(); function B() {} B.prototype.say = function () {   console.log(2); }; var b = new B(); b.say(); var c = new B(); c.say();

获取标签内容(包含标签)

function getOuterhtml(el) {   if (el.outerHTML) {     return el.outerHTML;   } else {     var container = document.createElement("div");     container.appendChild(el.clonenode(true));     return container.innerHTML;   } }

字符串hash值

function hash(str) {   var hash = 5381;   var i = str.length;   while (i) {     hash = (hash * 33) ^ str.charCodeAt(--i);   }   return hash >>> 0; } console.log(hash("222sd"));// 164533792

“从Vue.js源码中学到的方法有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 从Vue.js源码中学到的方法有哪些

本文链接: https://lsjlt.com/news/84107.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 从Vue.js源码中学到的方法有哪些
    本篇内容介绍了“从Vue.js源码中学到的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!立即执行...
    99+
    2024-04-02
  • Vue源码中值得学习的方法有哪些
    本篇内容介绍了“Vue源码中值得学习的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 数据类...
    99+
    2024-04-02
  • 从Vue源码中学到的5个JavaScript技巧分别是哪些
    这期内容当中小编将会给大家带来有关从Vue源码中学到的5个JavaScript技巧分别是哪些,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。从他人的成果中汲取营养是进步的法...
    99+
    2024-04-02
  • vue.js的安装方法有哪些
    小编给大家分享一下vue.js的安装方法有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱...
    99+
    2023-06-15
  • Vue.js源码的使用方法是什么
    本篇内容介绍了“Vue.js源码的使用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!立即执行函数...
    99+
    2024-04-02
  • vue.js的安装方式有哪些
    这篇文章主要介绍了vue.js的安装方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue.js(读音 /vjuː/, 类似于 view)是一个构建数据驱动的 web...
    99+
    2023-06-22
  • HTML颜色代码的学习资源有哪些?
    颜色是网页设计中非常重要的元素,它可以用来传达信息、营造氛围、吸引注意力等。在HTML中,颜色是用颜色代码指定的,颜色代码有两种表示方式: 十六进制颜色代码:由六位十六进制数字组成,表示红色、绿色和蓝色的值。例如,红色可以用十六进制颜...
    99+
    2024-02-14
    HTML颜色代码 资源 在线工具 书籍 教程
  • Vue.js中有哪些常用的模板语法
    本篇文章给大家分享的是有关Vue.js中有哪些常用的模板语法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、文本渲染Vue支持动态渲染文本,...
    99+
    2024-04-02
  • pip换源方法有哪些
    pip换源方法有修改pip配置文件、使用命令行参数、使用环境变量和使用第三方工具。详细介绍:1、修改pip配置文件,编辑pip.conf文件,在其中添加[global]index-url = 镜像源地址;2、使用命令行参数,在使用pip安装...
    99+
    2023-11-23
    pip换源 pip
  • vue.js代码的使用技巧有哪些
    这篇文章主要介绍了vue.js代码的使用技巧有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.js代码的使用技巧有哪些文章都会有所收获,下面我们一起来看看吧。slots 新语法向 3.0 看齐使用带有...
    99+
    2023-06-27
  • java修改源码的方式有哪些
    Java修改源码的方式有以下几种: 直接修改源码文件:通过文本编辑器打开源码文件,对其进行修改,保存后重新编译即可。 使用反射:通...
    99+
    2023-10-23
    java
  • Java的学习方法有哪些
    这篇文章主要介绍“Java的学习方法有哪些”,在日常操作中,相信很多人在Java的学习方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的学习方法有哪些”的疑惑...
    99+
    2024-04-02
  • ASP.NET的学习方法有哪些
    本篇内容介绍了“ASP.NET的学习方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果你已经有较多的面向对象开发经验,跳过以下这两...
    99+
    2023-06-17
  • 学习laravel的方法有哪些
    本篇内容介绍了“学习laravel的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!学习 Laravel 更有效率的七个建议随着社区...
    99+
    2023-06-25
  • C++源代码相关编制方法有哪些
    本篇内容主要讲解“C++源代码相关编制方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++源代码相关编制方法有哪些”吧!1.多态性的概念 多态性是指用一个名字定义不同的函数,这函数执行...
    99+
    2023-06-17
  • TensorFlow中的集成学习方法有哪些
    TensorFlow中常用的集成学习方法包括: 随机森林(Random Forest):随机森林是一种基于决策树的集成学习方法,...
    99+
    2024-03-01
    TensorFlow
  • 从json中获取数据的方法有哪些
    从JSON中获取数据的方法主要有以下几种:1. 使用编程语言的内置JSON解析器:大多数编程语言都提供了内置的JSON解析器,可以通...
    99+
    2023-08-18
    json
  • 学习Python遇到的编码错误有哪些
    这篇文章主要讲解了“学习Python遇到的编码错误有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“学习Python遇到的编码错误有哪些”吧!1、误解Python范围python解析范围是...
    99+
    2023-06-16
  • Python学习方法有哪些
    本篇内容主要讲解“Python学习方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python学习方法有哪些”吧!  1、找简单易懂、例程比较好的教程,从头看到结尾,不要看很多本,专注于...
    99+
    2023-06-01
  • Vue.js中有哪些实现组件通信的方式
    这期内容当中小编将会给大家带来有关Vue.js中有哪些实现组件通信的方式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是Vue组件?组件 (Component) 是 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作