JavaScript学习小结

  • filter、forEach、map方法的默认返回值
filter()方法中不能嵌套forEach()、filter()、map()这几个方法,因为return的值不能自由控制。
filter(),通过条件中return的true或者fasle来判断是否过滤;
forEach(),固定return undefined;
map(),return一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
  • window.location属性

举例:http://www.abcd.cc/company/index.html#/user/login

console.log(window.location);

{
    hash:"#/user/login",
    host:"www.abcd.cc",
    hostname:"www.abcd.cc",
    href:"http://www.abcd.cc/company/index.html#/user/login",
    origin:"http://www.abcd.cc",
    pathname:"/company/index.html",
    port:"",
    protocol:"http:",
}
  • 会造成隐式转换的情况:

ECMAScript中所有类型的值都有与这两个 Boolean 值 等价的值,意思是几种基础类型都有能转化成true和fasle的对应值或条件

if():
  true:任何非空字符串
  false:空字符串、null、undefined、{}

isNaN():
  true:NaN、"blue"
  false:10、"10"、true

Boolean():
  true:任何非空字符串、任何非零数字值(包括无穷大)、任何对象、n/a
  false:空字符串、0 和 NaN、null、undefined

Number()、parseInt()、parseFloat():
  如果是 Boolean 值,true 和 false 将分别被转换为 1和 0
  如果是数字值,只是简单的传入和返回
  如果是 null 值,返回 0
  如果是 undefined,返回 NaN
  如果是字符串,遵循下列规则:
    1)如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1,"123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了)
    2)如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽 略前导零)
    3)如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值
    4)如果字符串是空的(不包含任何字符),则将其转换为 0
    5)如果字符串中包含除上述格式之外的字符,则将其转换为 NaN
  如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。

 NaN:任何数值除以 0会返回 NaN,NaN 与任何值都不相等,包括 NaN 本身。

 

var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6

上面代码中,变量ilet声明的,当前的i只在本轮循环有效,所以每一次循环的i其实都是一个新的变量,所以最后输出的是6。你可能会问,如果每一轮循环的变量i都是重新声明的,那它怎么知道上一轮循环的值,从而计算出本轮循环的值?这是因为 JavaScript 引擎内部会记住上一轮循环的值,初始化本轮的变量i时,就在上一轮循环的基础上进行计算。

  • 另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"
foo // error: foo is not defined
  •  上面代码中,foo是匹配的模式,baz才是变量。真正被赋值的是变量baz,而不是模式foo
let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

 上面代码中,数值和布尔值的包装对象都有toString属性,因此变量s都能取到值。

  • 解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefinednull无法转为对象,所以对它们进行解构赋值,都会报错。
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值