zoukankan      html  css  js  c++  java
  • 您真的了解javaScript?(3)

    点击下面链接,来测测您的javaScript水平吧。

    JavaScript Puzzlers!

    21.

    function f() {}
    var a = f.prototype, b = Object.getPrototypeOf(f);
    a === b; //false

    f.prototype输出Object {constructor: function},是f的实例对象的原型(实例对象就是那些通过new f()创造的对象),用来保存实例的共享方法,有一个指针constructor来指向构造函数。

    而Object.getPrototypeOf(f)用于读取对象的`__proto__`属性,打印后输出function () { [native code] },是f对象的原型。

    大白话来说,如果说实例对象new f()是儿子,f.prototype是爸爸,那么这里getPrototypeOf获取的就是爷爷(的方法,如果有)。通过原型链,找不到爷爷就找祖爷爷...

    22.

    function foo() { }
    var oldName = foo.name;
    foo.name = "bar";
    [oldName, foo.name]

    函数的name属性,返回该函数的函数名,这个属性是一个只读属性,不能更改,就算赋值给了一个变量叫newFoo,这个函数的名字还是foo。当然,硬要改的话,用 Object.defineProperty()这个办法。

    23.

    "1 2 3".replace(/d/g, parseInt)

    stringObject.replace(regexp/substr,replacement)方法的replacement参数可以是字符串,也可以是函数。当它是函数时,每个匹配都调用该函数,它返回的字符串将作为替换文本使用。该函数的第一个参数是匹配模式的字符串。接下来的参数是与模式中的子表达式匹配的字符串,可以有 0 个或多个这样的参数。接下来的参数是一个整数,声明了匹配在 stringObject 中出现的位置。最后一个参数是 stringObject 本身。所以parseInt被调用时候的参数,实际是这样:[1, 0][2, 2][3, 4]。

    24.

    function f() {}
    var parent = Object.getPrototypeOf(f);
    f.name // "f"
    parent.name // ""
    typeof eval(f.name) // "function"
    typeof eval(parent.name) //  "undefined"

    匿名函数赋值给变量parent,匿名函数name属性依旧是未定义,答案说会抛出error,然而我的chrome浏览器并不会...

    25.

    var lowerCaseOnly =  /^[a-z]+$/;
    [lowerCaseOnly.test(null), lowerCaseOnly.test()]

    RegExpObject.test(string)方法,用于检测一个字符串是否匹配某个模式,返回一个布尔值。

    /^[a-z]+$/ 这个正则表达式是以小写字母开头和结尾,表示整串都要小写。

    test()会把参数转为字符串。参数null和undefined都是小写,于是匹配为true。

    26.

    var a = {class: "Animal", name: 'Fido'}; 
    a.class

    class是一个关键字,不要用关键字保留字这些东西来命名自定义属性或者变量。非要用的话,可以这样访问:a.['class']

    27.

    var a = new Date("epoch")

    Date()参数形式有5种: 

    1)new Date("month dd,yyyy hh:mm:ss"); 

    2)new Date("month dd,yyyy"); 

    3)new Date(yyyy,mth,dd,hh,mm,ss); 

    4)new Date(yyyy,mth,dd); 

    5)new Date(ms); 

    "epoch"不是一个符合规范的参数。但Date()并不会因此抛出异常,无论如何它会告诉你,这是一个invalid date。

    28.

    var a = Function.length,
        b = new Function().length
    a === b 

    false。Function.length == 1,而一个function(Function 的实例)的 length 属性就是函数签名的参数个数, 所以 b == 0.

    29.

    var a = Date(0);
    var b = new Date(0);
    var c = new Date();
    [a === b, b === c, a === c] //false, false, false

    Date(0) 函数返回的是一个当前时间的字符串"string"。作为构造函数时,返回的类型是"object"。有参数0返回1970.1.1,无参数则返回当前时间。

    30.

    function captureOne(re, str) {
      var match = re.exec(str);
      return match && match[1];
    }
    var numRe  = /num=(d+)/ig,
        wordRe = /word=(w+)/i,
        a1 = captureOne(numRe,  "num=1"),
        a2 = captureOne(wordRe, "word=1"),
        a3 = captureOne(numRe,  "NUM=2"),
        a4 = captureOne(wordRe,  "WORD=2");
    [a1 === a2, a3 === a4]

    exec() 方法用于检索字符串中的正则表达式的匹配。如果 exec() 找到了匹配的文本,则返回一个结果数组。否则,返回 null。

    正则表达式 /g表示全局匹配,表示可以多次执行exec()方法。

    当 exec() 找到了与表达式相匹配的文本时,在匹配后,它将把 RegExpObject 的 lastIndex 属性设置为匹配文本的最后一个字符的下一个位置。这就是说,您可以通过反复调用 exec() 方法来遍历字符串中的所有匹配文本。当 exec() 再也找不到匹配的文本时,它将返回 null,并把 lastIndex 属性重置为 0。

    31

    var a = new Date("2014-03-19"),
        b = new Date(2014, 03, 19);
    [a.getDay() === b.getDay(), a.getMonth() === b.getMonth()]

    1. The getMonth method returns an integer between 0 (January) and 11 (December). 从Date对象返回月份(0~11)

    2. 当Date()参数是字符串,JavaScript 使用以下规则来分析日期字符串:

    1).它首先尝试使用 ISO 日期格式 来分析日期字符串: YYYY-MM-DDTHH:mm:ss.sssZ

    2).如果日期字符串未采用 ISO 格式,则 JavaScript 会尝试使用其他 其他日期格式 来分析日期。

    所以Date()有两种参数,当参数为第一种: Date(year, month, date[, hours[, minutes[, seconds[,ms]]]]),b = new Date(2014, 03, 19),b实际上是2014-4-19。所以getDay()会得到不同的结果。

    32.

    if ('http://giftwrapped.com/picture.jpg'.match('.gif')) {
      'a gif file'
    } else {
      'not a gif file'
    }

    match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。当参数是一个字符串或一个数字,它会使用new RegExp(obj)来隐式转换成一个 RegExp

    这样,'.gif'匹配 '任意字符gif'。所以这题返回的是 a gif file

    所以,当要匹配gif文件时,可以这样写:/^.*.(gif)$/i;

  • 相关阅读:
    js实现深拷贝的5种方式
    react中Context的使用
    react中link参数传递以及url乱码解决
    js中forEach结束循环
    javaScript函数和方法的区别
    将逻辑运算字符串转化为逻辑运算进行运算
    redux的使用流程
    react类型检查
    for..in,for..of 和forEach的区别
    JavaScript基础知识(JSON、Function对象、原型、引用类型)
  • 原文地址:https://www.cnblogs.com/dodocie/p/6756599.html
Copyright © 2011-2022 走看看