这篇文章上次修改于 268 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

2019_09

属性描述符

{ 
    value: '属性值',
    writable: Boolean, // 是否可改
    configurable: Boolean,  // 是否可重新配置
    enumerable: Boolean,  // 是否可权举
    (setter, getter)
}
  • 设置consfigurable:true时,writable属性还是能由true改为false,但此操作不可逆。
  • Object.preventExtensions(obj)禁止对象扩展新属性并保留已有属性。
  • Object.seal()(密封)就是使用Object.preventExtensions()将对象所有属性标记为configurable: false,不能添加新属性,也不能重新配置或者删除现有属性,但可以修改现有属性的值。
  • Object.freeze(..) (冻结对象) ,在对象上调用Object.seal(..) 并把所有“数据访问”属性标记为 writable:false,这样就无法修改该对象属性的值。

Object.create(obj)

if (!Object.create) {
  Object.create = function(o) {
    function F(){}
    F.prototype = o;
    return new F();
  };
}

parseInt(数字, 进制数)

var arr = ['2', '3', '4', '5'];
var res = arr.map(parseInt);
console.log(res); // ==> ['2', 'NaN', 'NaN', 'NaN']
// map遍历
// index > 0 && index <= Math.abs(item) 时返回的是"NaN"
// index === 0 && index > Math.abs(item) 时返回的是item数字
/*
 * arr.map((item, index) => {
 *   return parseInt(item, index);
 * })
 */

indexOf() --> 返回某个指定的字符串值在字符串中首次出现的位置

若存在返回首次出现的索引值,否则返回-1。

var  a = "hello word";
// 常用的判断方式
a.indexOf('el') !== -1   // 1 !== 1   --> true

// 另一种判断方式(`~` 等价于 `-(x+1)`)
~a.indexOf('el');  // ==> -2
~a.indexOf('cl');  // ==> 0  -->字位操作,非数学运算

NULL

思考:typeof undefined === typeof NULL

js将NULL当做未赋值的变量,而null是代表空值并可以赋给变量

typeof NULL // ==> typeof不会报错,未定义的变量返回"undefined"
typeof undefined === typeof NULL;   // ==> true

if判断(js运算符优先级

if判断的表达式会被执行,涉及到运算符优先级问题

function func() {
  var x = 2, y = 4, z =7;
  if(x = y-- <= x) {
    console.log(x, y);
  }
  console.log(x, y);
}
func();  // ==> false, 3