09.代码输出结果

1、

实现一个工具方法,将下划线命名格式的字符串转化为驼峰命名格式

//实现1
var convert1 = (name) => {
  let result = name.split("_");
  const [first, ...rest] = result;
  return (
    first +
    rest
      .map((item) => item.substring(0, 1).toUpperCase() + item.substring(1))
      .join("")
  );
};

//实现2
var convert2 = (name) => {
  return name.replace(/(\_\w)/g, function (word) {
    return word.slice(1, 2).toUpperCase() + word.slice(2);
  });
};

2、

实现 Array 的 flat 方法的polyfill

我的(未实现):

var flat = (arr, number) => {
  let result = [],
    count = 0;
  count++;

  for (let item of arr) {
    if (Array.isArray(item)) {
      if (count === number) {
        break;
      }
      flat(item, number);
    } else {
      result.push(item);
    }
  }
  return result;
};

修改后的实现:

var flat = (arr, number = 10) => {
  let result = [],count = 0;

  var helper = (arr) => {
    let res = [];
    count++;
    for (let item of arr) {
      if (Array.isArray(item)) {
        if (count === number) {
          break;
        }
        res = res.concat(helper(item));
      } else {
        res.push(item);
      }
    }
    return res;
  };

  result = result.concat(helper(arr));

  return result;
};

参考实现:

var flat = (arr) => {
  return arr.reduce((pre, cur) => {
    return pre.concat(Array.isArray(cur) ? flat(cur) : cur);
  }, []);
};

3、

// code1

console.log(typeof typeof typeof null); //string
console.log(typeof null);  //"object"
console.log(typeof typeof null); //string

// code 2

var a = 1;
function fn() {
  console.log(a); //undefined
  var a = 2;
}
fn();
var a = 1;
function fn() {
  console.log(a); //Uncaught ReferenceError: Cannot access 'a' before initialization
  let a = 2;
}
fn();

// code 3

var count = 10;
function a() {
  return count + 10;
}

function b() {
  var count = 20;
  return a();
}

console.log(b()); //20

// code 4

<style>
  .classA {
    color: blue;
  }
  .classB {
    color: red;
  }
  p {
    color: black;
  }
</style>
<p class="classB classA">hello</p>
//元素p内的文字最终什么颜色 red

4、

// code 1

Function.prototype.a = () => alert(1);
Object.prototype.b = () => alert(2);
function Foo() {}
var bar = new Foo();
bar.a(); //Uncaught TypeError: bar.a is not a function
bar.b(); //2

// code 2

function Foo() {
  this.a = 1;
  return {
    a: 4,
    b: 5,
  };
}

Foo.prototype.a = 6;
Foo.prototype.b = 7;
Foo.prototype.c = 8;

var o = new Foo();
console.log(o.a); //4
console.log(o.b); //5
console.log(o.c); //undefined