前端知识:12个非常实用的javascript小技巧

zhilelele      2022-02-08     411

关键词:

在这篇文章中将给大家分享12个有关于JavaScript的小技巧。这些小技巧可能在你的实际工作中或许能帮助你解决一些问题。

使用!!操作符转换布尔值

有时候我们需要对一个变量查检其是否存在或者检查值是否有一个有效值,如果存在就返回true值。为了做这样的验证,我们可以使用!!操作符来实现是非常的方便与简单。对于变量可以使用!!variable做检测,只要变量的值为:0null" "undefined或者NaN都将返回的是false,反之返回的是true。比如下面的示例:

function Account(cash) {
    this.cash = cash;
    this.hasMoney = !!cash;
}
var account = new Account(100.50);
console.log(account.cash); // 100.50
console.log(account.hasMoney); // true

var emptyAccount = new Account(0);
console.log(emptyAccount.cash); // 0
console.log(emptyAccount.hasMoney); // false

在这个示例中,只要account.cash的值大于0,那么account.hasMoney返回的值就是true

使用+将字符串转换成数字

这个技巧非常有用,其非常简单,可以交字符串数据转换成数字,不过其只适合用于字符串数据,否则将返回NaN,比如下面的示例:

function toNumber(strNumber) {
    return +strNumber;
}
console.log(toNumber("1234")); // 1234
console.log(toNumber("ACB")); // NaN

这个也适用于Date,在本例中,它将返回的是时间戳数字:

console.log(+new Date()) // 1461288164385

并条件符

如果你有一段这样的代码:

if (conected) {
    login();
}

你也可以将变量简写,并且使用&&和函数连接在一起,比如上面的示例,可以简写成这样:

conected && login();

如果一些属性或函数存在于一个对象中,你也可以这样做检测,如下面的代码所示:

user && user.login();

使用||运算符

在ES6中有默认参数这一特性。为了在老版本的浏览器中模拟这一特性,可以使用||操作符,并且将将默认值当做第二个参数传入。如果第一个参数返回的值为false,那么第二个值将会认为是一个默认值。如下面这个示例:

function User(name, age) {
    this.name = name || "Oliver Queen";
    this.age = age || 27;
}
var user1 = new User();
console.log(user1.name); // Oliver Queen
console.log(user1.age); // 27

var user2 = new User("Barry Allen", 25);
console.log(user2.name); // Barry Allen
console.log(user2.age); // 25

在循环中缓存array.length

这个技巧很简单,这个在处理一个很大的数组循环时,对性能影响将是非常大的。基本上,大家都会写一个这样的同步迭代的数组:

for(var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

如果是一个小型数组,这样做很好,如果你要处理的是一个大的数组,这段代码在每次迭代都将会重新计算数组的大小,这将会导致一些延误。为了避免这种现象出现,可以将array.length做一个缓存:

var length = array.length;
for(var i = 0; i < length; i++) {
    console.log(array[i]);
}

你也可以写在这样:

for(var i = 0, length = array.length; i < length; i++) {
    console.log(array[i]);
}

检测对象中属性

当你需要检测一些属性是否存在,避免运行未定义的函数或属性时,这个小技巧就显得很有用。如果你打算定些一些跨兼容的浏览器代码,你也可能会用到这个小技巧。例如,你想使用document.querySelector()来选择一个id,并且让它能兼容IE6浏览器,但是在IE6浏览器中这个函数是不存在的,那么使用这个操作符来检测这个函数是否存在就显得非常的有用,如下面的示例:

if (‘querySelector‘ in document) {
    document.querySelector("#id");
} else {
    document.getElementById("id");
}

在这个示例中,如果document不存在querySelector函数,那么就会调用docuemnt.getElementById("id")

获取数组中最后一个元素

Array.prototype.slice(begin,end)用来获取beginend之间的数组元素。如果你不设置end参数,将会将数组的默认长度值当作end值。但有些同学可能不知道这个函数还可以接受负值作为参数。如果你设置一个负值作为begin的值,那么你可以获取数组的最后一个元素。如:

var array = [1,2,3,4,5,6];
console.log(array.slice(-1)); // [6]
console.log(array.slice(-2)); // [5,6]
console.log(array.slice(-3)); // [4,5,6]

数组截断

这个小技巧主要用来锁定数组的大小,如果用于删除数组中的一些元素来说,是非常有用的。例如,你的数组有10个元素,但你只想只要前五个元素,那么你可以通过array.length=5来截断数组。如下面这个示例:

var array = [1,2,3,4,5,6];
console.log(array.length); // 6
array.length = 3;
console.log(array.length); // 3
console.log(array); // [1,2,3]

替换所有

String.replace()函数允许你使用字符串或正则表达式来替换字符串,本身这个函数只替换第一次出现的字符串,不过你可以使用正则表达多中的/g来模拟replaceAll()函数功能:

var string = "john john";
console.log(string.replace(/hn/, "ana")); // "joana john"
console.log(string.replace(/hn/g, "ana")); // "joana joana"

合并数组

如果你要合并两个数组,一般情况之下你都会使用Array.concat()函数:

var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.concat(array2)); // [1,2,3,4,5,6];

然后这个函数并不适合用来合并两个大型的数组,因为其将消耗大量的内存来存储新创建的数组。在这种情况之个,可以使用Array.pus().apply(arr1,arr2)来替代创建一个新数组。这种方法不是用来创建一个新的数组,其只是将第一个第二个数组合并在一起,同时减少内存的使用:

var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];

NodeList转换成数组

如果你运行document.querySelectorAll(“p”)函数时,它可能返回DOM元素的数组,也就是NodeList对象。但这个对象不具有数组的函数功能,比如sort()reduce()map()filter()等。为了让这些原生的数组函数功能也能用于其上面,需要将节点列表转换成数组。可以使用[].slice.call(elements)来实现:

var elements = document.querySelectorAll("p"); // NodeList
var arrayElements = [].slice.call(elements); // Now the NodeList is an array
var arrayElements = Array.from(elements); // This is another way of converting NodeList to Array

数组元素的洗牌

对于数组元素的洗牌,不需要使用任何外部的库,比如Lodash,只要这样做:

var list = [1,2,3];
console.log(list.sort(function() { Math.random() - 0.5 })); // [2,1,3]

总结

现在你学会了些有用的JavaScript小技巧。希望这些小技巧能在工作中帮助你解决一些麻烦,或者说这篇文章对你有所帮助。如果你想学习更多前端知识,快速就业的话,可以关注知海匠库互联网学院前端课程http://www.zhihaijiangku.com

10个非常实用的svg动画操作javascript库

10个非常实用的SVG动画操作JavaScript库 SVG通常可以用作跨分辨率视频。这意味着在一块高分屏幕上不会降低图片的锐度。此外,你甚至可以让SVG动起来,通过使用一些javascript类库。下面,我们分享一些javascript类库,这些类库... 查看详情

前端javascript面试技巧

第1章课程简介从几个常见面试开始,讨论针对一个题目的分析思路,总结题目对应的知识点。最后列出所有JS知识点的集合——JS知识体系框架。1-1课程简介(导学)1-2前言1-3几个面试题1-4如何搞定所有面试题第2章JS基础知识(... 查看详情

如何在javascript中创建虚拟键盘(代码片段)

💂个人网站:【海拥】【小霸王游戏机】【蜘蛛纸牌】🤟风趣幽默的前端学习课程:👉28个案例趣学前端💅想寻找共同学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习群】【学习文档】💬免费且实... 查看详情

史上最全!56个javascript的「手写」知识点,扫盲啦!

...复加群,自助秒进前端群今天就带着大家来复习一下JavaScript的56个「手写」知识点哦~~~大厂手写题1、实现原生AJAX封装const ajax =   get(url, fn)     const xhr = new XMLHttpRequest()    xhr.open('GET',  查看详情

《javascript》20个非常实用的javascript一行代码,持续更新中(代码片段)

介绍JavaScript众所周知是弱类型语言,这是缺点,也是优点,缺点是如果使用的人不严谨那么项目级的开发可以最终演变成在BUG中写代码…10行代码11个BUG,一言难尽,但如果使用的人严谨、逻辑性强,对Java... 查看详情

20个杀手级javascript单行代码(代码片段)

...思维图”获取公众号所有JS思维图本文整理了一些实用的JavaScript单行代码,非常好用~~获取浏览器Cookie的值通过document.cookie 来查找cookie值const cookie = name => `; $document.cookie`.split(`; $nam 查看详情

1.javascript中常用的数据类型转换,非常实用

前言   简单、粗暴、明了、实用  1.字符串转数组    常用方法split(‘正则或字符串:以何种方式分割‘,‘指定返回的数组的最大长度,可选参数’);    eg:     (1... 查看详情

使用javascript和css的随机颜色生成器(代码片段)

💂个人网站:【海拥】【摸鱼小游戏】🤟风趣幽默的前端学习课程:👉28个案例趣学前端💅想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】💬免费且实用的计算机相关知识题库:👉... 查看详情

长知识了!这8个很少用但却很实用的python库真棒!(代码片段)

欢迎关注,专注Python、数据分析、数据挖掘、好玩工具!本文介绍一些我们可能很少听过,但是对于特定问题或者特定任务来说,却非常实用的工具包,文末提供技术交流群,欢迎大家一起学习讨论。为了... 查看详情

想学web前端需要学啥知识

...非常想学web前端开发,我知道需要学习html,div+css,还有javascript,还有一些ps的基础(切图)。但我零基础,需要怎么开头呢,找人带吗?找培训班吗?现在根本没人肯把自己的技术教给你,除非工作的时候没办法,培训班么都... 查看详情

20个实用而专业的javascript技巧

我为你收集了一系列有用的JavaScript技巧,让你的代码看起来更优雅和专业。我希望你会喜欢它!1、单线If-Else在JavaScript中,你可以使用三元条件运算符来压缩if-else语句。例如:constage=10;letgroup;//LONGVERSIONif(age>=18){group="Adult";}els... 查看详情

前端知识点总结

...生影响,不同的渲染模式会影响到浏览器对于CSS代码甚至JavaScript脚本的解析,所以Doctype是非常关键的,尤其是在IE系列浏览器 查看详情

前端javascript知识

...、Boolean、Number、String介绍一下JS有哪些内置对象。Object是JavaScript中所有对象的父对象数据封装类对象:Object、Array、Boolean、Number、String其他对象:Function、Argument、Math、Date、RegExp、Error列举几条JavaScript的基本代码规范。( 查看详情

6月份那些最实用的jquery插件专辑

  jQuery是一个快速、流行的JavaScript库,jQuery用于文档处理、事件处理、动画和Ajax交互非常简单,学习曲线也很平坦。2016年6月的jQuery插件专辑里,我们选择一些最好的和有用的jQuery插件分享给大家。您可能感兴趣的相关文章We... 查看详情

全栈之路-前端javascript基础知识3(代码片段)

1、js的字符串除了一些常用的获取位置、获取长度、截取、拼接外,还有个好用的函数padStart和padEnd,可以填充字符,例如:functiontest1()letstr="string";console.log(str.padStart(9));console.log(str.padStart(9,"# 查看详情

前端知识杂烩(javascript篇)

1.JavaScript是一门什么样的语言,它有什么特点?2.JavaScript的数据类型都有什么?3.请描述一下cookies,sessionStorage和localStorage的区别?4.webSocket如何兼容低浏览器?(阿里)5.this和它声明环境无关,而完全取决于他的执行环境6.JavaScript... 查看详情

摸鱼快报:golangnet/http中的雕虫小技(代码片段)

...几周开发中雕虫小技。1.向开发环境localhost:3000种植cookie前端使用CreateReactApp脚手架,默认以localhost:3000端口启动;后端使用golang-gin框架,使用8034端口启动。登录模块走的是sso,前后端分离,后端需要向前端写入认证cookiec.SetSameSite... 查看详情

前端javascript知识

...)navigator.userAgent(2)不同浏览器的特性,如addEventListenerJavaScript有哪几种数据类型?简单,Number,Boolean,String,Null,Undefined复合,Object,Arra 查看详情