知识点、日常开发bug及解决方案记录

说明: 谨以此文章记录自己在日常开发中总结的知识点、bug及解决方案,供自己和有需要的网友学习,后续会持续更新。若有错误,欢迎指正!

  1. 数组操作方法splice小结
    splice(startP, delNum, addData): 参数含义依次为,开始删除的位置,删除的长度,插入的数据(可多项插入也可不插入)。返回包含删除的项的数组。ps:注意返回的数组与原数组的区别
    举例:
var colors = ['red', 'green', 'blue'];
var removed = colors.splice(0,1,'yellow');
console.log(colors);  // green, yellow, blue
console.log(removed); // red

注意此处的colors.splice(0,1,'yellow') !== [green, yellow, blue]

  1. this的取值,分为四种情况:
    (1). 函数作为构造函数(用来new对象的函数),那么其中的this代表它即将new出来的对象
function Fn() {
    this.name='玉米';
    this.sex='女';
    
    console.log(this); // Fn {name: "玉米", sex: "女"}
}

var f1 = new Fn();
console.log(f1.name);  // 玉米
console.log(f1.sex);   // 女

ps:以上仅限new Fn()的情况,即Fn函数作为构 造函数的情况。如果直接调用Fn函数,而不是new Fn(),情况就大不一样了

function Fn() {
    this.name='玉米';
    this.sex='女';
    console.log(this); // Window {postMessage:f,....}
}
Fn();

(2).函数作为对象的一个属性,并且作为对象的一个属性被调用时,函数中的this指向该对象

var obj = {
    x: 10,
    fn: function () {
        console.log(this);   // Object {x: 10, fn: function}
        console.log(this.x);  //10
    }
}

obj.fn();

ps: fn函数不作为obj的一个属性被调用,情况则不同

var obj = {
    x: 10,
    fn: function () {
        console.log(this); // Window {...}
        console.log(this.x);  //undefined
    }
}

var fn1 = obj.fn;
fn1();

(3). 函数用call、apply调用或者使用bind处理函数,this的值就取传入对象的值

var obj = {
    x: 10
};
window.x = 20;

function fn() {
    console.log(this.x)
}

fn();  // 20
fn.call(obj);   // 10
fn.apply(obj); // 10
fn.bind(obj)(); // 10

var fn1 = fn.bind(obj);
fn1();  // 10

ps: call、apply:在特定作用域中调用函数;bind:创建函数实例,调用bind()的函数不会立马执行,其中this值会绑定到传给bind()函数的值。
(4).全局、调用普通函数:
在全局环境下,this永远指向 Window
普通函数在调用时,this也指向window

window.x = 10;
function fn() {
    console.log(this);  
    console.log(this.x); 
}
fn();  // Window {...}   10
---------------------------------------
function fn1() {
    var x = 20;
    function fn2() {
        console.log(this.x);
    }
    fn2();
}

fn1();  // 10

--------------------------------------------
window.x = 20;
var obj={
    x: 10,
    fun: function() {
        function fn1() {
            console.log(this.x);
        }
        fn1();
    }
}
// 函数fn1虽然定义在obj.fun内部,但仍然是一个普通函数,this仍然指向window
obj.fun();  // 20

3.自由变量:在A作用域中使用变量x,但是却没在A作用域中申明,对于A作用域来说,x就是自由变量。

4.require 命令的基本功能是,读入并执行一个 JavaScript 文件,然后返回该模块的 exports 对象。如果没有发现指定模块,会报错。

  1. 解析:Function.prototype.call.apply(log,[console,arguments]);
  • 先将Function.prototype.call看作一个整体:FunctionCall;
  • =>FunctionCall.apply(log,[console,arguments]);
  • =>log.FunctionCall(console,arguments);
  • =>console.log(arguments)
  1. for...in循环读取键名,for...of循环读取键值。for...of循环调用遍历器接口,数组的遍历器接口只返回具有数字索引的属性。这一点跟for...in循环也不一样。(js各种遍历方式的差异及优缺点可参考阮一峰的ES6教程的16节末尾)
let arr = [3, 5, 7];
arr.foo = 'hello';

for (let i in arr) {
  console.log(i); // "0", "1", "2", "foo"
}

for (let i of arr) {
  console.log(i); //  "3", "5", "7"
}

7.Reflect.ownKeys方法用于返回对象的所有属性,基本等同于Object.getOwnPropertyNames与Object.getOwnPropertySymbols之和.

var myObject = {
  foo: 1,
  bar: 2,
  [Symbol.for('baz')]: 3,
  [Symbol.for('bing')]: 4,
};

// 旧写法
Object.getOwnPropertyNames(myObject)
// ['foo', 'bar']

Object.getOwnPropertySymbols(myObject)
//[Symbol(baz), Symbol(bing)]

// 新写法
Reflect.ownKeys(myObject)
// ['foo', 'bar', Symbol(baz), Symbol(bing)]
  1. webpack-merge包中merge方法用于对象、或者数组的合并。例如:
console.log(merge({name:'小红', age:13}, {name: '小兰', sex: '女'}))
// {name: '小兰', age: 13, sex: '女'}

9.js 替换字符串中所有指定子字符串

string.replace(/reallyDo/g, replaceWith);
string.replace(new RegExp(reallyDo, 'g'), replaceWith);

string:字符串表达式包含要替代的子字符串。
reallyDo:被搜索的子字符串。
replaceWith:用于替换的子字符串。
  1. 在VUE中使用h5的video 和audio,动态绑定src不播放bug解决方案。
    给audio绑定个ref值

<audio ref='audio' controls>
    您的浏览器不支持 audio 元素。
</audio>

//在需要动态绑定的方法里用$refs动态设置src
this.$refs.audio.src = res.data.audio_url
  1. React 组件传props的两种常用方式:
// 第一种:key=value的形式
<TestComponent name="小明" age="12"></TestComponent>

// 第二种:拓展运算符的形式  效果等同第一种
var props = {  
  name: '小明',  
  age: '12'  
};
<TestComponent {...props}></TestComponent>
  1. this.props对象的属性与组件的属性一一对应,但是有一个例外,就是this.props.children属性,它代表组件的所有子节点。值得注意的是:如果当前组件没有子节点,它就是 undefined ;如果有一个子节点,数据类型是 object ;如果有多个子节点,数据类型就是 array 。
  2. 块级作用域有哪些?
  • for(){} 括号和大括号内是两个不同的作用域
  • if(){} 大括号内是一个作用域
  • 函数内部(下面有两个块级作用域,if代码块内、if代码块外部函数代码块内部)
function(){
  let n = 5;
  if (true) {let n = 10}
  console.log(n);   // 5
}
  1. 暂时性死区: 代码块内,使用let/const声明变量之前,该变量都是不可用的。
  2. 本地调试vue项目,跨域,无法获取cookie:在前端配置文件中设置代理。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352