我的编程空间,编程开发者的网络收藏夹
学习永远不晚

4个值得收藏的Javascript技巧

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

4个值得收藏的Javascript技巧

前言

学习一门语言的一种非常有效的方法就是阅读该编程语言开发的优秀开源项目的源代码。 Vuejs是最好的Javascript开源项目之一。

1.变量转字符串

vue/class="lazy" data-src/shared/util.js

将值转换为字符串是一个非常常见的需求,在Javascript中,有两个函数将值转换为字符串:

  • String()
  • JSON.stringify()

这两个功能具有不同的机制,请看下面代码:

console.log(String(null)); // null
console.log(JSON.stringify(null)); // null

console.log(String(undefined)); // undefined 这里是字符串
console.log(JSON.stringify(undefined)); // undefined 这里是变量

console.log(String("abc")); // abc
console.log(JSON.stringify("abc")); // "abc"

console.log(String({ key: "value" })); // [object Object]
console.log(JSON.stringify({ key: "value" })); // {"key":"value"}

console.log(String([1, 2, 3])); // 1,2,3
console.log(JSON.stringify([1, 2, 3])); // [1,2,3]

const obj = {
    title: "devpoint",
    toString() {
        return "obj";
    },
};
console.log(String(obj)); // obj
console.log(JSON.stringify(obj)); // {"title":"devpoint"}

从上面输出结果来看,两个方法将对象转为字符串机制存在差异,如何选择呢?

  • 实际开发中我们需要将nullundefined转换为字符串时,经常是希望它返回一个空字符串。
  • 当需要将一个数组和一个普通对象转换为字符串时,经常使用JSON.stringify
  • 如果需要对象的toString方法被重写,则需要使用String()。
  • 在其他情况下,使用String()将变量转换为字符串。

为了满足以上条件,Vue源码的实现如下:

function isPlainObject(obj) {
    return Object.prototype.toString.call(obj) === "[object Object]";
}
function toString(val) {
    if (val === null || val === undefined) return "";
    if (Array.isArray(val)) return JSON.stringify(val);
    if (isPlainObject(val) && val.toString === Object.prototype.toString)
        return JSON.stringify(val);
    return String(val);
}
const obj = {
    title: "devpoint",
    toString() {
        return "obj";
    },
};
console.log(toString(obj)); // obj
console.log(toString([1, 2, 3])); // [1, 2, 3]
console.log(toString(undefined)); // ""
console.log(toString(null)); // ""

2.普通对象

vue/class="lazy" data-src/shared/util.js

Object.prototype.toString允许将对象转换为字符串。对于普通对象,当调用此方法时,总是返回[object object]

const runToString = (obj) => Object.prototype.toString.call(obj);
console.log(runToString({})); // [object Object]
console.log(runToString({ title: "devpoint" })); // [object Object]
console.log(runToString({ title: "devpoint", author: { name: "devpoint" } })); // [object Object]

类似上面这种对象我们称之为普通对象。

在Javascript中还有一些特殊的对象,如ArrayStringRegExp,它们在Javascript引擎中具有特殊的设计。当它们调用Object.prototype.toString方法时,会返回不同的结果。

const runToString = (obj) => Object.prototype.toString.call(obj);
console.log(runToString(["devpoint", 2021])); // [object Array]
console.log(runToString(new String("devpoint"))); // [object String]
console.log(runToString(/devpoint/)); // [object RegExp]

为了区分特殊设计对象和普通对象,可以用下面的函数来实现。

function isPlainObject(obj) {
    return Object.prototype.toString.call(obj) === "[object Object]";
}

很多时候,我们希望一个函数只执行一次。如果多次调用该函数,则只会执行第一次。

3.once

vue/class="lazy" data-src/shared/util.js

很多时候,我们希望一个函数只执行一次。如果多次调用该函数,则只会执行第一次。

function once(fn) {
    let called = false;
    return function () {
        if (!called) {
            called = true;
            fn.apply(this, arguments);
        }
    };
}

function launchRocket() {
    console.log("我已经执行了");
}
const launchRocketOnce = once(launchRocket);
launchRocketOnce();
launchRocketOnce();
launchRocketOnce();

4.浏览器嗅探

vue/class="lazy" data-src/core/util/env.js

我们知道Javascript可以在浏览器、nodejs等环境中运行,那么如何检查当前的Javascript代码是否在浏览器环境中运行?

如果Javascript在浏览器环境中运行,则会有一个全局对象:window。因此,可以通过以下方式判断环境:

const inBrowser = typeof window !== "undefined";

在Chrome中执行

在Node中执行

如果脚本在浏览器环境中运行,那么我们可以通过以下方式获取浏览器的userAgent:

const UA = inBrowser && window.navigator.userAgent.toLowerCase();

在Chrome中执行

不同的浏览器具有不同的userAgent。在Internet Explorer的userAgent中,始终包含单词MSIETrident。在Chrome浏览器的userAgent中,始终包含Chrome一词。

同样,在Android操作系统浏览器中,userAgent始终包含单词Android。在iOS中,总是有iPhone、iPad、iPod、iOS一词。

因此,可以通过检查userAgent来确定当前的浏览器供应商和操作系统。

export const UA = inBrowser && window.navigator.userAgent.toLowerCase();
export const isIE = UA && /msie|trident/.test(UA);
export const isIE9 = UA && UA.indexOf("msie 9.0") > 0;
export const isEdge = UA && UA.indexOf("edge/") > 0;
export const isAndroid =  (UA && UA.indexOf("android") > 0) || weexPlatform === "android";
export const isIOS =  (UA && /iphone|ipad|ipod|ios/.test(UA)) || weexPlatform === "ios";
export const isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
export const isPhantomJS = UA && /phantomjs/.test(UA);
export const isFF = UA && UA.match(/firefox\/(\d+)/);

附带说明一下,Edge和Chrome均基于Chromium,因此两种浏览器的userAgent都包含Chrome一词。也就是说,当浏览器的userAgent中包含Chrome一词时,该浏览器不一定是Chrome。const isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge

到此这篇关于4个值得收藏的Javascript技巧的文章就介绍到这了,更多相关Javascript技巧内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

4个值得收藏的Javascript技巧

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

电脑技巧:Microsoft Edge浏览器技巧介绍,值得收藏!

大家可以将其它浏览器的书签数据等数据很方便迁移到Edge浏览器,只需点击几下就可以导入书签、历史记录和密码。
电脑技巧:Microsoft Edge浏览器技巧介绍,值得收藏!
2024-04-23

值得收藏的27个Linux文档编辑命令

linux col命令Linux col命令用于过滤控制字符。 在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col指令则能有效滤除这些控
2022-06-04

值得收藏,分享两个实用的shell脚本实例

今天主要分享两个shell脚本实例。值得收藏,分享两个实用的shell脚本实例,内容不重要,重点是看如何去实现。
值得收藏,分享两个实用的shell脚本实例
2024-04-23

10 个实用的 WordPress 技巧教程 推荐收藏

1、自动向 WordPress 编辑器插入文本 编辑当前主题目录的 functions.php 文件,并粘贴以下代码: 复制代码代码如下:
2022-06-12

8个PPT扁平化设计的超实用技巧 你值得拥有

  今天小编要给大家讲的是八个PPT的扁平化设计,首先小编给大家科普一下什么是扁平化,扁平化就是目前比较流行的一种主流设计风格大家看看下面的教程就知道啦!本文总结的扁平化设计技巧,在字体、图标、排版、配色等方面都有提及到,而且还很实用,大家在做海报的时候也可以用哦!  注:此处所谈的扁平化指的是一个大的概念,将后面衍生
8个PPT扁平化设计的超实用技巧 你值得拥有
2024-04-17

11个web前端开发人员必备的在线工具,功能强大,值得收藏

互联网上有许多很棒的工具,使Web开发人员的工作更加轻松。在本文中,我将简要介绍我在工作中经常使用的11种工具。1. caniuse.com你是否不确定web API是否与特定浏览器兼容,或者是否可以在移动浏览器中访问?此在线工具可以轻松测
2023-06-03

一个分析和解决Java应用程序内存浪费的实战例子,值得收藏!

内存是当今世界上被广泛浪费的硬件资源之一。由于编程效率低下,惊人量的内存浪费被浪费了。这种模式在多个企业应用程序中重复出现。为了证明这种情况,我们进行了一项小型研究。
2023-06-04

ASP Performance Monitor收藏集:10个鲜为人知的技巧来超越你的竞争对手

:。这些技巧将帮助你识别和修复ASP.NET应用程序中的性能瓶颈,从而提高应用程序的速度和响应能力。
ASP Performance Monitor收藏集:10个鲜为人知的技巧来超越你的竞争对手
2024-02-05

编程热搜

目录