js学习笔记

  1. Object对象
    1. 静态方法
    2. 实例方法
    3. valueOf
  2. 编码风格
    1. switch case 结构

Object对象

静态方法

Object.keys(),Object.getOwnPropertyNames()

可以用来遍历对象的属性

var obj1 = {
    "name":"pxy",
    "age":12
}
//undefined
Object.getOwnPropertyNames(obj1)

//(2) ["name", "age"]

实例方法

Object.protype上定义的方法就是实例方法,能够被Object的实例调用

Object.getOwnPropertyNames(Object.prototype)

(12) ["constructor", "__defineGetter__", "__defineSetter__", "hasOwnProperty", "__lookupGetter__", "__lookupSetter__", "isPrototypeOf", "propertyIsEnumerable", "toString", "valueOf", "__proto__", "toLocaleString"]
0: "constructor"
1: "__defineGetter__"
2: "__defineSetter__"
3: "hasOwnProperty"
4: "__lookupGetter__"
5: "__lookupSetter__"
6: "isPrototypeOf"
7: "propertyIsEnumerable"
8: "toString"
9: "valueOf"
10: "__proto__"
11: "toLocaleString"
length: 12
__proto__: Array(0)

这些方法是所有对象都公有的

valueOf

valueOf方法的作用是返回一个对象的“值”,默认情况下返回对象本身。

var obj = new Object();
obj.valueOf() === obj // true

但是这种情况除外:

var a = new Object(1)
a.valueOf() === a // false

valueOf方法的主要用途是,JavaScript 自动类型转换时会默认调用这个方法

var obj = new Object();
1 + obj 
//"1[object Object]"

可以重写 valueOf 方法

obj.valueOf = function(){
    return 2;
}
1+obj
//3

这个很好理解,因为obj查找 valueOf 函数,会先从自己的属性开始找,找不到就通过 __proto__ 找上层对象的valueOf 属性

编码风格

switch case 结构

不推荐如下的方式

function doAction(action) {
  switch (action) {
    case 'hack':
      return 'hack';
    case 'slash':
      return 'slash';
    case 'run':
      return 'run';
    default:
      throw new Error('Invalid action.');
  }
}

推荐使用对象的方式

function doAction(action) {
  var actions = {
    'hack': function () {
      return 'hack';
    },
    'slash': function () {
      return 'slash';
    },
    'run': function () {
      return 'run';
    }
  };

  if (typeof actions[action] !== 'function') {
    throw new Error('Invalid action.');
  }

  return actions[action]();
}

更加简洁


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论

文章标题:js学习笔记

文章字数:433

本文作者:prontosil

发布时间:2020-04-21, 15:46:28

最后更新:2020-04-25, 17:22:34

原始链接:http://prontosil.com/posts/ff9e87b6/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录