JavaScript基础整理(二)

  • Set + 扩展运算符... :
[...new Set(array)]

过滤原数组重复值。数组中数值类型为 undefined, null, boolean, string, number。当是object, function, array时则不适用.


  • 与(&&)运算符将会返回第一个false/‘falsy’的值。如果没有找到任何虚值表达式,则返回最后一个真值表达式。它采用短路来防止不必要的工作。
    或(||)运算符将返回第一个true/‘truthy’的值。当所有的操作数都是false时,将返回最后一个表达式的结果

  • 我们可以通过+连接运算符将一个number类型的变量转换成string类型。此外,+也是将字符串转换为数字的最快方法,因为如果值已经是数字,它不会执行任何操作。
const val = 1 + "";
let int = "15"; int = +int;

在某些上下文中,+将被解释为连接操作符,而不是加法操作符。当这种情况发生时(您希望返回一个整数,而不是浮点数),您可以使用两个波浪号:~~。(需要注意为英文格式)

const int = ~~"15";

  • ES7开始,我们可以使用幂运算符 **作为求幂的简写,相对之前的Math.pow(2, 3) 更加快捷。这是一个很简单实用的点,但是大部分的教程并不会专门介绍它。
console.log(2 ** 3);

  • 我们平时可以使用Math.floor(), Math.ceil()Math.round()float类型转换成integer类型。但是还有一种更快的方法可以使用|(位或运算符)将浮点数截断为整数。该操作结果是直接删除小数点后的内容,将浮点数截断为整数,和上面提到的其他几个方法是有所区别的。
console.log(23.9 | 0);  // Result: 23  
console.log(-23.9 | 0); 

  • 如果您想从数组的末尾删除值,有比使用splice()更快的替代方法。例如,如果你知道原始数组的长度,就可以通过重新定义它的length属性来实现截取。

  • 实现一个函数,判断输入是不是回文字符串
function run(input) {
  if (typeof input !== 'string') return false;
  return input.split('').reverse().join('') === input;
}

  • 深拷贝和浅拷贝
var obj1 = {a: 1, b: 2};
var obj2 = obj1;
obj2.a = 3;
console.log(obj1); // {a: 3, b: 2}
console.log(obj2); // {a: 3, b: 2}

浅拷贝只是引用的拷贝,两者还是指向内存中的同一个地址。
而深拷贝是指两者指向不同的内存地址。

Object.assign()
浅拷贝 - 处理第一层的深拷贝

var obj1 = {a: 1, b: {c: 2}};
var obj2 =Object.assign({}, obj1);
obj2.a = 3;
obj2.b.c = 3;
console.log(obj1); // {a: 1, b: {c: 3}}
console.log(obj2); // {a: 3, b: {c: 3}}

实现深拷贝 - JSON

var obj1 = {a: 1, b: {c: 2}};
var obj2 =JSON.parse(JSON.stringify(obj1));

简单好用,但是它会抛弃对象的constructor。也就是说,深拷贝之后,不管对象原来的构造函数是什么,深拷贝之后都会变成Object。
而且这种方法正确处理的只有Number,String,Boolean和Array。RegExp和function是无法通过这种方式深拷贝的。



  • Event Loop是javascript的执行机制
  • 宏任务一般是:包括整体代码script, setTimeout, setInterval, setImmediate.

  • 微任务:原生Promise(有些实现的promise将then方法放到了宏任务中)、process.nextTick、Object.observe(已废弃)、 MutationObserver 记住就行了。

  • Event Queue Priority:
    宏任务同步-> 微任务(microtask queue, such as Promise) -> 宏任务异步(macrotask queue, such as setTimeOut, setInterval, setImmediate)

  • setTimeout,是经过指定时间后,把要执行的任务加入到Event Queue中

  • setInterval, 每隔指定的时间将注册的函数置入Event Queue,如果前面的任务耗时太久,那么同样需要等待


  • JQuery使用建议
  1. 尽量减少对DOM元素的访问和操作
  2. 尽量避免给DOM元素绑定多个相同类型的事件处理函数,可以将多个相同类型事件处理函数合并到一个处理函数,通过数据状态来处理分支
  3. 尽量避免使用toggle事件

  • Ajax(Asynchronous Javascript And XML)
    异步就是向服务器发送请求的时候,我们不必等待结果,而是可以同时做其他的事情,等到有了结果它自己会根据设定进行后续操作,与此同时,页面是不会发生整页刷新的,提高了用户体验。
// 创建Ajax的过程:
// 1) 创建XMLHttpRequest对象(异步调用对象)
var xhr = new XMLHttpRequest();

// 2) 创建新的Http请求(方法、URL、是否异步)
xhr.open(‘get’,’example.php’,false);

// 3) 设置响应HTTP请求状态变化的函数。
// onreadystatechange事件中readyState属性等于4。
// 响应的HTTP状态为200(OK)或者304(Not Modified)。

// 4) 发送http请求
xhr.send(data);

// 5) 获取异步调用返回的数据

注意:

  1. 页面初次加载时,尽量在web服务器一次性输出所有相关的数据,只在页面加载完成之后,用户进行操作时采用ajax进行交互。
  2. 同步ajax在IE上会产生页面假死的问题。所以建议采用异步ajax。
  3. 尽量减少ajax请求次数
  4. ajax安全问题,对于敏感数据在服务器端处理,避免在客户端处理过滤。对于关键业务逻辑代码也必须放在服务器端处理。
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容