为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • js的隐式转换(+和-)

    1. 巧用+/-:     如果要把一个字符串变数字,用字符串-0          如果把数字变字符串,用数字+0

    2. a===b(类型和数值都相同)

      NAN≠NAN        new Object ≠ new Object

    3. a==b

      null == undefined      number == string 转number(1==“1.0”)

      Boolean == ?转number(1==true)

      object == number|string 尝试将对象转为基本型  new String('hi') == 'hi'

    查看全部
  • js有弱类型特性

    js六种数据类型:number  string  Boolean  null  undefined   object(function array date)

    查看全部
  • bind方法模拟
    在不支持ES5的浏览器里模拟bind方法
    几个注意地方:
    1.var aArgs=Array.prototype.slice.call(arguments,1);//这里的arguments是相对function(oThis)而言的,也即对应的是oThis这个参数,这个oThis又是对应bind()里面的参数的,由于bind()第一个参数是对象,后面还可以是用于currying的参数,所以通过slice将后面的参数获取。由于arguments不是标准的数组,需通过数组原型链的调用来使用slice方法。
    2.aArgs.concat(Array.prototype.slice.call(arguments)) //这里的arguments是对应fBound=function()这个匿名函数的,而fBound作为最后的返回,对应的是函数bind后赋给的变量(函数),后者再次调用时传入的参数就是这里的arguments,将上面currying的参数并上后面再传入的参数,才组成最开始的函数的参数this/fToBind。
    3.fNOP空对象是为了作为通过new之后消除bind作用后函数中this指向空对象的原型链准备。而通过this instanceof fNOP来判断是否使用了new,并决定将对象bind上。没用new,则判断为false,bind(oThis);否则为true,即使用new,函数中this指向空对象。

    查看全部
  • bind方法


    不同的调用方法下,this 指向不同的值

    module.getX(); //this 指向module,返回 81

    var getX = module.getX;
    getX(); // this 指向 全局变量,返回9

    var boundGetX = getX.bind(module);
    boundGetX(); // this 被 bind 向 module,返回81

    查看全部
  • this指向:
    1、直接调用函数(<function>()):this指向全局对象。
    2、方法调用模式(<object>.<function>()):this指向调用者<object>。
    3、构造函数调用模式(obj = new <function>()):this指向被构造者obj。
    4、apply/call/bind方法:this指向方法的第一个参数。
    5、严格模式下,this不允许指向全局对象,此时this值为undefined。

    查看全部
    0 采集 收起 来源:[JavaScript]this

    2021-04-19

  • Array.isArray:判断是否为数组
    实例:Array.isArray(<val>)
    返回值:如果<val>时数组,则返回true,否则返回false。
    注意:当检测<arr>实例时,isArray方法优于instanceof,因为isArray能检测iframe。
          此方法为ES5方法,IE8-不支持。

    查看全部
  • forEach:遍历数组元素的方法,arr.forEach(function(x,index,a){});//x具体的元素值,index对应的下标,a数组本身
    map:数组映射,var arr=[1,2,3];arr.map(function(x){return x+10;});//[11,12,13] arr;//[1,2,3]不会修改原数组
    filter:数组过滤,原数组不被修改,arr.filter(function(x,index){})
    every:表示每一个元素都要符合一定的条件 var arr=[1,2,3];arr.every(function(x){return x<10;});//true
    some:只要任意一个元素符合条件就可以了,every相当于逻辑与,some相当于逻辑或
    reduce:数组两个元素两两操作var arr=[1,2,3];arr.reduce(function(x,y){return x+y;},0);//6,这里的0是和1最开始进行相加的,每次结果作为新的x,下一个元素作为y,原数组未被修改
    reduceRight:是从右到左开始遍历的,其他的还是跟reduce一样的,都可以将数组聚合成一个结果
    indexOf:arr.indexOf(a);//表示元素值为a的所在数组的下标位置,arr.indexOf(a,i)从下标为i的元素开始查找元素值为a的下标位置
    lastIndexOf:与indexOf差不多,只不过是从右到左开始查找的,返回元素所在的下标位置
    isArray:判断是否为数组,必须用Array构造器对象调用
    其他的判断是否数组的方法:
    [] instanceof Array;//true
    ({}).toString.apply([])==='[object Array]';//true
    [].constructor === Array;//true

    查看全部
  • 1.join()方法 默认是将字符串转换为字符串,并以“,”隔开元素,而join()中的参数就是替换字符串中的“,”,
    而new Array(n+1).join(str)的原理是,创建一个n+1大小的数组,若用join()方法会产生含n个“,”的字符串,而str正好代替这些“,”以造成重复n次str参数的字符串。
    2.reverse()方法 将数组的顺序颠倒,注意:原数组会被改变成颠倒后的数组。
    3.sort()方法 sort()方法只会对数组进行字符顺序上的排序,例如a,b,c,d,而如果是数字,则会取第一位数的字符顺序进行排序,改完以后原数组会被修改。如果想用sort进行数字上的排序,则应写入函数参数function(a,b){return a-b;},这是升序排列,反之降序是b-a。
    4.concat()方法 作用是合并数组,返回值是合并后的数组,原数组不会改变。如果参数是一个一维数组(没有嵌套),则合并的时候会拉平数组,如果是嵌套数组,合并后只会拉平最外一层。
    5.slice()方法 切断数组,原数组不会修改,如果传入一个参数n,则返回第n+1个到最后一个元素的数组,如果传入n,m,则返回第n+1到m元素的数组,-1代表最后一个元素,-2代表倒数第二个元素,以此类推,若输入的参数为负数i,j,则返回倒数第|i|个到倒数第|j|+1个元素,总结来说,对于正数,左区间开,对于负数,右区间开。
    6.splice胶结方法 切断数组胶结数组,原数组会被修改,输入参数n,那么原数组第n+1个元素到最后一个元素都会被删除(会作为该函数的返回值),如果输入参数m,n,则删除第m+1个到第m+n个元素。如果输入两个以上的参数则删除前两个参数所指定的元素,替换上剩下的参数。

    查看全部
  • Object.getOwProertyDescriptor(obj,property_name);<br>
    value: 属性值
    writable: 该属性是否可写,可改变<br>
    enumerable:该属性是否可被枚举,就是可在for in中出现<br>
    configurable: 该属性的标签是否可改变,是否可用delete将该属性删除。

    用defineProperty定义属性时,默认configurable为true,如果设置为false后,该属性不管是什么方式都无法更改。

    查看全部
  • 注意:
    1. 用for-in遍历时,原型链上的属性也会被遍历到,而且是无序遍历。
    2. 属性删除用delete, prototype属性不可被删除;var定义的变量也不可用delete删除,函数也不可以被delete掉(经验证,不同的内核实现方式不同,在chrome下不可被delete掉,返回false,但在firefox和IE10下可以被delete掉,返回true,对于函数也是相同的结果)

    查看全部
  • var obj=Object.create({x:1});
    obj.x;//1
    typeof obj.toString;//"function" //toString()来源Object源型链
    obj.hasOwnProperty("x");//false
    //原型链继承关系 :
    obj->{x:1}->Object prototype ->null;

    并不是所有对象都有toString()方法
    var obj=Object.create(null);
    obj.toString //undefined
    此时原型链继承关系 :obj->null。所以无toString()方法

    查看全部
  • in 和 hasOwnProperty
    in是判断该对象是否具有所要查找的属性
    而hasOwnProperty则是判断该对象的实例是否具有所要查找的属性
    因此可以自定义一个查找对象属性所在位置的函数:
    function hasProperty(obj,property){
    return obj.hasOwnProperty(property) && property in obj;
    }//返回true时表示该属性在它的实例上,否则就在原型上

    查看全部
  • 对象构造:
    除了本身被赋予的值之外,对象还有几个隐藏标签:
    proto:对象的对象属性prototype上的赋值
    class:对象的种类
    extensible:是否允许该对象继续增加新的属性

    另外对象的值(如 x=1),也有对应的属性或方法,提供一些访问权限的控制
    writable:是否可写
    enumerable:是否能被删除
    configurable:是否能够枚举
    value:值
    get/set:

    查看全部
  • 特殊运算符的种类:
    1、条件运算符 c?a:b c为true 则取a,否则取b
    2、逗号运算符 a,b 例如 var s = (1,2,3),则s依次赋值,最后输出为3
    3、delete运算符 delete obj.x 删除对象obj中的x属性  在IE9下,obj中必须configurable:true 才可以删除,否则无效
    4、in运算符 判断obj是否有值或window里是否有变量,返回布尔值 例如 attr in json 或 'document' in window
    5、instanceof 判断对象类型 {} instanceof Object // true
    6、new运算符 创建一个新对象 new obj / new array ...
    7、this对象 全局用指向window,函数内指向函数本身,浮动指针
    8、typeof 判断对象,返回对象类型 例如 typeof 100 === 'number' // true
    9、void 一元的,判断所有值,返回均为undefined

    查看全部
  • 过hasOwnProperty()判断属性到底是 对象上的 还是 对象的原型链上的

    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!