「前端JavaScript开发技巧 · 日常开发积累分享」42条+的技巧带你前端开发越学越用越轻松❤️

81 阅读13分钟

🙏废话不多说系列,直接开整🙏

JavaScript-logo2.webp

1. js 的方法细节注意:

  • 原生方法 replace的方法:① replace(",","#");// 将字符串中第一个匹配的字符替换掉;② replace(/,/g, "#");// 将字符串中所有匹配的字符替换掉。
function good(){
    // 字符串替换:replace(/,/g, "#");// 将字符串中所有的逗号“,”替换为“#”
    // 字符串替换:replace(",", "#");// 将字符串中第一个逗号替换为“#”
    var a = "80,80,78,90";
    console.log("初始的字符串 ==> ", a);
    let arr1 = a.replace(",","#");
    console.log("替换第一个匹配的字符:", arr1);
    let arr2 = a.replace(/,/g, "#");
    console.log("全部替换后的字符:", arr2);
    let arr  = a.split(" ");
    console.log("切分后的字符数组:",arr);
    arr = null;
    console.log("将arr置为null:",arr);
}

结果展示:

image.png

2. 注意let  和 const 以及 var 变量的细分区别:

传送门:www.cnblogs.com/zhaoxiaoyin…

更简洁的区分:www.runoob.com/js/js-let-c…

问题:在全局作用域中,用 const / let 声明的变量不在 window 上,那么到底在哪里?如何去获取?

<script>
    var a = 10;
    function b() { }
    console.log(window.a); // 10
    console.log(window.b); // b(){}

    let c = 20;
    const cc = 30;
    function ccfun() { }
    
    console.log(window.c); // undefined  (在 window 作用域中不能访问到scope域中的数据)
    console.log(cc)  // 30  (这些变量通常在 scope 作用域中)
    console.log(window.ccfun);// ccfun(){}
    
</script>

3. 获取复选框中被选中的值:

<input type="checkbox" name="customerServiceTypeCheckbox"  value="alarm">告警客服<br>
<input type="checkbox" name="customerServiceTypeCheckbox"  value="wechat">微信客服
<button id="checkeds">显示复选框中所有所选的value值</button>
<script>
    // 第一种:写法(可以获取多种的选择的值)
    $("#checkeds").click(function () {
        let checked_val = [];
        let obj = document.getElementsByName("customerServiceTypeCheckbox");
        for (k in obj){
            if(obj[k].checked){
                checked_val.push(obj[k].value);
            }
        }
        alert(checked_val);
    });
</script>

判断复选框是否被选中:

let flag = $("#alarm").is(':checked'); // #alarm 为复选框的ID,is()函数用来判断指定的复选框是否被选中。

4. 获取 <select> 下拉框中的选中的值:

    <script>
$("#selected").click(function () {
    var selectedOptionValue = $("#customerServiceType").val(); // 获取下拉框中所选中的值
    var selectedOptionText = $("select option:selected").text();
    var allOptionText = $('#customerServiceType').text(); // 获取下拉框中所有的选框中的text文本内容
    alert(selectedOptionValue + "  -  " + selectedOptionText);
});
</script>

5. 时间转换:

<script>
	// 格式化日期,如月、日、时、分、秒保证为2位数
    function formatNumber(n) {
        n = n.toString()
        return n[1] ? n : '0' + n;
    }
    /**
    * 时间戳 → 指定日期字符串
    * @param number 时间戳(长整数)
    * @param format 格式有两种【1:'Y-M-D h:m:s',2.'Y年M月D日 h:m:s'】如果需要指定部分元素的内容,请按照上述元素提取。
    * @returns {*}
    */
    function formatTime(number, format) {
        let time = new Date(number)
        let newArr = []
        let formatArr = ['Y', 'M', 'D', 'h', 'm', 's']
        newArr.push(time.getFullYear())
        newArr.push(formatNumber(time.getMonth() + 1))
        newArr.push(formatNumber(time.getDate()))

        newArr.push(formatNumber(time.getHours()))
        newArr.push(formatNumber(time.getMinutes()))
        newArr.push(formatNumber(time.getSeconds()))

        for (let i in newArr) {
            format = format.replace(formatArr[i], newArr[i])
        }
        return format;
    }

    // 时间戳  → 默认时间格式(中国标准时间)
    function convertToDateStr(number) {
        return new Date(number);
    }
</script>

6. chrome浏览器调试前端console.log的技巧:

① 控制台中获取 页面资源的DOM节点:

var dom1 = document.getElementById("#spanId");  

console.log(dom1);

第一步:拿到DOM对象;第二步:输出DOM对象;(如果需要拿到对象中的内容,再去按照JS中的使用方法操作,再去输出)

7. 对某个DIV或者DOM元素,进行隐藏:

<!-- 去掉隐藏属性:display:"" 
	注意:和disabled的去边,是标签属性不能有事件,则加入标签属性 disabled="disabled",
	如果又需要则请使用Jquert去removeAttr("disabled")这个属性
-->
<!-- 第一种方式:位置和内容全部隐身,打开审查元素可以看到,但是后面的内部可以占用此标签的位置-->
<span style="display:none">你看不到我(我有display:none)</span>

<!-- 第二种方式:表面上隐身,实际上还占着位置;打开审查元素可以看到,但是不能够被后面的内容占用-->
<span style="visibility:hidden">你看不见我,但是我还占这一个位置</span>

<!-- 第三种:隐藏的输入框-->
<input type="hidden" name="hiddenInput" value="你看不到的输入框">

8. 得到当前的时间:

var curDateTime = new Date();
var curTimeZone = curDateTime.getTime();// 当前时间戳

9. 判断当前页面是否存在ID对象:

let objLength = $("#textDemo").length
if(objLength > 0){
    return true;// 存在此ID(对象)
}

10. 弹出框换行输出:

var numStr = "123\n123";
alert(numStr + "\n good name.");
// 扩展内容:JS的转义字符

image.png

11. 对指定的标签内的元素进行移除和清空:

$("#divContainer").remove();// 移除指定元素自身
$("#divContainer").empty();// 移除指定元素内所有元素(同时也可以用来判断指定标签内是否含有元素)

12. 将数组拼接成字符串:

let arr = [1,2,3,4,5];
let arrStr = arr.join("-");
alert("数据类型:" + (typeof arrStr) + "\n数据值为:" + arrStr);

image.png

注意:还有一种写法为:arr.join("-",arr);  // 这只是JS描述的规范中忽略掉了多余的参数而已。

13. JS的全匹配函数

传送门:www.w3school.com.cn/js/js_regex…

let content = "abcabcdefdefdeg";
let reg = RegExp(/abc/);
if (content.match(reg)) {
	// 如果内容包含了abc,则 do Something……
}

14. 点击复选框后面的文字,也能选中当前复选框(单选框也是如此,各种标签也可以试试)

<!-- 第一种写法:(点击文字不能够选中此复选框,只能点击复选框才能选中此复选框)-->
<input type="checkbox" name="box" id="accept" value="accept">同意&nbsp;
<input type="checkbox" name="box" id="noAccept" value="no_accept">不同意

<!-- 推荐 第二种写法:(点击文字就能同时选中此复选框)-->
<label for="accept">
	<input type="checkbox" name="box" id="accept" value="accept">同意
</label>&nbsp;
<label for="noAaccept">
	<input type="checkbox" name="box" id="noAccept" value="no_accept">不同意
</label>

15. jQuery 的三种加载页面立即执行的写法

// 推荐:第一种写法:
$(function(){
	// Do something when the Page onload.
});
// 第二种写法:(JavaScript自带的页面加载完则执行此方法)
window.onload = function(){
	// Do you want to do when the Page onload.
}
// 第三种写法:
$(document).ready(function(){
	// Do you want to do when the Page onload.
});

16. 得到一组复选框中被选中的value值

/**
 * 得到复选框中被选中的值(基于JavaScript的写法)
 * 参数:checkboxIdOfName 为一组复选框中的name值(一组中的复选框的name值一般都是属于一样的)
 * 返回:复选框中以“-”拼接的value集合字符串
 */
function getCheckedOfCheckbox_JS(checkboxIdOfName) {
    let arr = [], checkedStr = "";
    let obj = document.getElementsByName("box");
    for (i in obj) {
        if (obj[i].checked) {
            arr.push(obj[i].value);
        }
    }
    // checkedStr = arr.join('-', arr);
    checkedStr = arr.join('-');
    return checkedStr;
}

/**
 * 得到复选框中被选中的值(基于JQuery的写法)
 * 参数: checkboxIdOfName 为一组复选框中的name值(一组中的复选框的name值一般都是属于一样的)
 * 返回:复选框中以“#”拼接的value集合字符串
 */
function getCheckedOfCheckbox_JQuery(checkboxIdOfName) {
    let arr2 = [], checkedStr2 = "";
    let obj2 = $("input[name='" + checkboxIdOfName + "']");
    for (k in obj2) {
        if (obj2[k].checked) {
            arr2.push(obj2[k].value);
        }
    }
    checkedStr2 = arr2.join('#');// 这是返回一个字符串
    return checkedStr2;
}

/**
 * 得到复选框中被选中的值(基于JQuery的写法)升级版本
 * 参数: checkboxIdOfName 为一组复选框中的name值(一组中的复选框的name值一般都是属于一样的)
 * 返回:复选框中以“#”拼接的value集合字符串
 */
function getCheckedOfCheckbox_JQueryPlus(checkboxIdOfName) {
    let arr = [];
    $("input[name='" + checkboxIdOfName + "']:checked").each(function(){
        arr.push($(this).val());
    });
    return arr.join('#');
}

17. JavaScript对象非空判断

function isEmpty(obj) {
    return (typeof obj == "undefined" || obj == null || obj == "") ? true : false;
}

18. 时分秒→时间戳形式

function countDown(time) {
    let s = 0, hour = time.split(':')[0], min = time.split(':')[1], sec = time.split(':')[2];
    s = Number(hour * 3600) + Number(min * 60) + Number(sec);
    return s;
}

19. 时间戳→指定日期字符串

/**
 * 时间戳 → 指定日期字符串
 * @param number 时间戳(长整数)
 * @param format 格式有两种【1:'Y-M-D h:m:s',2.'Y年M月D日 h:m:s'】如果需要指定部分元素的内容,请按照上述元素提取。
 * @returns {*}
 */
function formatTime(number, format) {
    let time = new Date(number), newArr = [], formatArr = ['Y', 'M', 'D', 'h', 'm', 's'];
    newArr.push(time.getFullYear());
    newArr.push(formatNumber(time.getMonth() + 1));
    newArr.push(formatNumber(time.getDate()));
    newArr.push(formatNumber(time.getHours()));
    newArr.push(formatNumber(time.getMinutes()));
    newArr.push(formatNumber(time.getSeconds()));
    for (let i in newArr) {
        format = format.replace(formatArr[i], newArr[i])
    }
    return format;
}

20. 生成随机的ID

// 生成长度为10的随机字母数字字符串
function showRandomId(){
  const randomId = Math.random().toString(36).substring(2);
  // alert("生成随机数ID:" +  randomId);
  // console.log(randomId);
}

21. 得到随机16进制颜色代码

function getRandomColor(){
  const randomColorCode = '#'+Math.floor(Math.random()*0xffffff).toString(16).padEnd(6, '0');
  alert("随机16进制颜色代码:" + randomColorCode);
  console.log(randomColorCode)
}

22. 优雅地取整

var a = ~~2.33  // 2
var b = 2.33 | 0   // 2
var c = 2.33 >> 0   // 2
parseInt(num);  // num 的整数部分

23. 优雅的金钱格式化

/**
 * 格式化金钱格式化
 * 输入:1234567
 * 输出:1,234,567
 * @param {string} moneyStr 数字字符串
 * @return 格式化的金钱字符串
 */
function formatMoney1(moneyStr){
 return moneyStr.split('').reverse().reduce((prev, next, index) => {
   return ((index % 3) ? next : (next + ',')) + prev
 })
}

24. 五种方法实现值交换

// 1.传统,但需要借助临时变量
var temp = a; a = b; b = temp;
// 2.要求是两个整数
a ^= b; b ^= a; a ^= b;
// 3.借助数组
b = [a, a= b][0];
// 4.ES6,解构赋值
[a, b] = [b, a];
// 5.运用计算规则(要求是数字)
a = a + b;
b = a - b;
a = a - b;

25. 实现深拷贝

var b = JSON.parse(JSON.stringify(a));

26. 递归求阶乘

function factorial(n) {
	return (n > 1) ? n * f(n-1) : n;
}

27. 对浏览器控制台进行CSS样式调整

console.info("%c哈哈", "color:red; font-size:30px; font-family:华文楷体");

截图:

image.png

28. 数组拷贝(14个小技巧)

(关于如何拷贝和克隆数组的方法)

// 1.使用 Array.slice() 方法
const numbers = [1,2,3,4];
const copy = numbers.slice();
copy.push(5) // 添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers);  // 输出:[1,2,3,4]

// 2.使用 Array.map() 方法
const numbers = [1,2,3,4]
const copy = numbers.map(num => num)
copy.push(5)  // 添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); // 输出:[1,2,3,4]

// 3.使用 Array.from() 方法
const numbers = [1,2,3,4];
const copy = Array.from(new Set(numbers));
copy.push(5);  // 添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers);// 输出:[1,2,3,4]

// 4.使用展开操作符
const numbers = [1,2,3,4]
const copy = [...numbers];
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 5.使用 Array.of  方法和展开操作符
const numbers = [1,2,3,4]
const copy = Array.of(...numbers);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]
// 注意: 这里区别:Array.of 和 Array 的区别!
Array.of(7); // 结果是:[7]  这里只有一个元素的数组,此元素为7
Array.of(1,2,3); // 结果是: [1,2,3] 
Array(7); // 是创建一个数组长度为7的undifined元素的数组
Array(1,2,3);// [1,2,3]

// 6. 使用 Array 构造函数 和 展开操作符
const numbers = [1,2,3,4]
const copy = new Array(...numbers);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 7. 使用解构
const numbers = [1,2,3,4]
const [...copy] = numbers;
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 8. 使用 Array.concat 方法
const numbers = [1,2,3,4]
const copy = numbers.concat();
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 9. 使用 Array.push 方法和展开符
const numbers = [1,2,3,4];
let copy = [];
copy.push(...numbers);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 10. 使用 Array.unshift() 方法和展开操作符
const numbers = [1,2,3,4];
let copy = [];
copy.unshift(...numbers);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 11. 使用 Array.forEach() 方法和展开符
const numbers = [1,2,3,4];
let copy = [];
numbers.forEach((value) => copy.push(value));
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 12. 使用 for 循环
const numbers = [1,2,3,4];
let copy = [];
for(let i=0; i<numbers.length; i++) {
	copy.push(numbers[i]);
}
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 13. 使用 Array.reduce 方法
const numbers = [1,2,3,4];
const copy = numbers.reduce((acc, x) => {acc.push(x);return acc;}, []);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 14. 使用古老的 apply 方法
const numbers = [1,2,3,4]
let copy = [];
Array.prototype.push.apply(copy, numbers);
copy.push(5); //添加新项以证明不会修改原始数组
console.log(copy); // 输出:[1,2,3,4,5]
console.log(numbers); //输出:[1,2,3,4]

// 最后值得注意的是: 上面的方法是浅拷贝,如果是复杂的数据数组拷贝需要进行深拷贝;
// 15.深拷贝
var b = JSON.parse(JSON.string(a));
// 示例如下:
const studentObj = { name: 'Drew', age: 24 };
const copy = JSON.parse(JSON.stringify(studentObj));
copy.age = 20; // 修改age,以证明是深拷贝,验证不会修改原始数组
console.log(copy); // 输出:{name: "Drew", age: 20}
console.log(studentObj); // 输出:{name: "Drew", age: 24}

29. JS 异步加载 和 同步加载

  • 转存失败,建议直接上传图片文件异步加载:(非阻塞模式加载),浏览器在下载JS的同时,同时还会执行后续的页面处理。在 script 标签内,用 JS 创建一个 script 元素并插入到 document 中,这种就是异步加载 JS 文件
// 异步模式
(function(){
    var s = document.createElement('script');
    s.type = 'text/javascript';
    s.async = true;
    s.src = 'http://localhost/dome.js'
    var x = document.getElementsByTagName('script')[0];
    x.parentNode.insertBefore(s, x);
})();
  • 同步加载:阻塞模式,会阻止浏览器的后续处理。停止了后续的文件的解析,执行,如图像的渲染。浏览器之所以回采取同步模式,就是因为加载 JS 文件中有对 dom 操作,重定向,输出 document 等默认行为,所以同步才是最安全的。  通常,需要把加载的 JS 放在 body 结束标签之前,使得 JS 可在页面最后加载,尽量减少阻塞页面的渲染。这样可以先让页面显示出来。

  • 同步加载时瀑布模型,异步加载流程是并发模型。

<!-- 同步模式 -->
<script src="/ABTestPage/js/plugins/otherUtils/demo.js"></script>

30. 角度 弧度 切换

var rad = degrees * (Math.PI/180);
var degrees = rad*(180/Math.PI);
// ====================================  函数示例如下:======================================
/**
 * 角度 → 弧度
 * @param {number} degrees 
 */
function degreesToRad(degrees) {
  var rad = degrees * (Math.PI / 180);
  return rad;
}
/**
 * 弧度 → 角度
 * @param {number} rad 
 */
function radToDegrees(rad) {
  var degrees = rad * (180 / Math.PI);
  return degrees;
}

31. 数组排序

// 1.直接使用 Array.sort() 函数:只能升序, 使用范围为数字(正负)、字符
const arr = [10,2,3,-12], arrStr = ['b', 'a', 'd', 'c'];
console.log(arr.sort());// 输出:[-12, 10, 2, 3]
console.log(arrStr.sort()); // 输出:["a", "b", "c", "d"]

// 2.内部比较器 (可以实现,升序/降序)
function compareAsc(a,b){ return a - b; }
function compareDesc(a,b){ return b - a; }
function testCompareXXX(){
	var nums = [32, 42, 10, -10, 0.3];
	console.log(nums.sort(compareAsc));// 输出:[-10, 0.3, 10, 32, 42]
	console.log(nums.sort(compareDesc));// 输出:[42, 32, 10, 0.3, -10]
}

// 注意: 数组中的元素存在 数字 和 字符
function testAttention(){
	// 被非纯数字的字符截断再进行整数排序;纯数字的字符视为数字加入排序。
    var nums = [32, 42, 10, 'sfs', '0.12', -10, 3, -101, '0asx0'];
    console.log(nums.sort(compare));// 输出:[10, 32, 42, "sfs", -101, -10, "0.12", 3, "0asx0"]
    console.log(nums.sort(compareDesc));// 输出:[42, 32, 10, "sfs", 3, "0.12", -10, -101, "0asx0"]
}

32. JavaScript数组常见技巧

  1. 删除数组的重复项

    var fruits = ['apple','orange','grape','banana','apple','grape']
    // 第一种方法:
    var uniqFruits = Array.from(new Set(fruits));
    console.log(uniqFruits);
    // 第二种方法:
    var uniq_fruits = [...new Set(fruits)];
    console.log(uniq_fruits);
    
  2. 替换数组中的特定值

    var userNames = ['小智0', '小智1', '小智2', '小智3', '小智4']
    userNames.splice(0, 2, '小智替换位置0', '小智替换位置1')
    console.log(userNames)
    
  3. Array.from 达到 .map 的效果

    var friends = [
        { name: '小智', age: 22 },
        { name: '小明', age: 25 },
        { name: '小强', age: 21 },
        { name: '小亮', age: 23 }
    ]
    var friendsName = Array.from(friends, ({ name }) => name)
    console.log(friendsName);// ["小智", "小明", "小强", "小亮"]
    
  4. 置空数组

    var arr = [1, 2, 3, 4]
    arr.length = 0; // 第一种方法
    console.log(arr);
    var arr2 = [1,2,3,4,5]
    arr2 = []; // 第二种方法
    console.log(arr2);
    
  5. 将数组转换为对象

    var friendsName = ['Drew', 'Bob', 'Mary']
    var friendsNameObj = {...friendsName}
    console.log(friendsNameObj); // {0: "Drew", 1: "Bob", 2: "Mary"}
    
  6. 填充数组

    var newFilledArray = new Array(10).fill('good');
    console.log(newFilledArray);// (10) ["good", "good", "good", "good", "good", "good", "good", "good", "good", "good"]
    
  7. 数组合并

    var one = [1,1,1], two = [2,2,2], three = [3,3,3]
    var merged = [...one, ...two, ...three]
    console.log(merged) // (9) [1, 1, 1, 2, 2, 2, 3, 3, 3]
    
  8. 数组交集

    var numOne = [1,2,3,4,5], numTwo = [3,5,6,7]
    var repeat = [...new Set(numOne)].filter(item => numTwo.includes(item));
    console.log(repeat) // (2) [3, 5]
    
  9. 从数组中删除虚值(虚值:false, 0, '', null, NaN, undefined)

    var mixedArr = [9, false, 'good', NaN, undefined, '', 0, null];
    var trueArr = mixedArr.filter(Boolean)
    console.log(trueArr);  // (2) [9, "good"]
    
  10. 从数组中获取随机值

    var names = ['good', 'bad', 'small', 'max', 'min']
    var randomName = names[(Math.floor(Math.random() * (names.length)))]
    console.log(randomName)  // 随机从指定的数组中提取一个值
    
  11. 反转数组

    var number = [1,2,3,4,5]
    var reversedNumber = number.reverse();
    console.log(reversedNumber); // (5) [5, 4, 3, 2, 1]
    
  12. 对数组中的所有值求和

    var number = [1,4,6,7]
    var sum = number.reduce((x, y) => x + y);
    console.log(sum);  // 18
    
  13. 是浏览器当前显示的页面可以直接编辑的JS代码:

    document.body.contentEditable=true
    

    演示如下:(只不过这时临时的,如果在刷新F5刷新当前页面,人不会改变的。😄)

    image.png

33. arguments 对象转数组

arguents 对象是函数内可访问的类数组对象,包含了传给函数的参数值。但他跟数组又不太一样,虽然可以访问值和获取长度,却无法使用数组的其他方法。所幸的是,我们可以很方便的转成普通的数组:

var argArrary = Array.prototype.slice.call(arguments);

34. 数组求和

最容易让人想到的是用循环,但其实有更快捷的方法:

var numbers = [3, 5, 7, 2];
var sum = numbers.reduce((x,y) => x+y);
console.log(sum); // 17

35. 短路条件

充分利用JavaScript的逻辑运算符(短路与和短路或)

if(hungry){
	goToFridge();
}
// 可以替换为:
hungry && goToFridge(); // 如果hungry为true,那么则不执行 goToFridge();

36. 用逻辑设置变量默认值

function setDefault(args){
	args = args || 32;
}

37. 逗号操作符

let x = 1;
x = (x++, x);
console.log(x); // 2
x = (2, 3);
console.log(x); // 3

38. 用 length 重新设置数组大小

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

arr.length = 3;
console.log(arr.length); // 3
console.log(arr); // [1,2,3]

arr.length = 0;
console.log(arr.length); // 0
console.log(arr); // []

39. 巧用数组解构赋值交换两个变量的值

let a = 1, b = 2;
[a, b] = [b, a]
console.log(a); // 2
console.log(b); // 1

40. 数组元素随机顺序(洗牌算法)

var list = [1,2,3,4,5,6,7,8,9,10];
console.log(list.sort(function(){
	return Math.random() - 0.5;
})); // [4,8,9,2,1,3,6,7,5,10]

41. 对象动态属性名

// 这是 ES6 新增的用法,可以通过变量的形式指定属性名
const dynamic = 'color';
var item = {
	brand: 'Ford',
    [dynamic]: 'Blue'
}
console.log(item); // {brand: "Ford", color: "Blue"}

42. 数组去重

面试常考题目,如果不考虑自己实现,可以通过 Set 方便的完成数组去重

const my_array = [1,2,33,4,5,6,2,3,1,2,1,]
const unique_array = [...new Set(my_array)]
console.log(unique_array); // [1,2,33,4,5,6,3]

🙏至此,非常感谢阅读🙏

JavaScript-logo2.webp