概率抽奖算法
/// <summary> /// 抽奖 /// </summary> /// <param name="probabilities">每个奖项的概率&
原文:https://github.com/ElemeFE/node-interview/tree/master/sections/zh-cn
关键字: typeof
、 instanceof
、 toString
、 constructor
Value function typeof
-------------------------------------
"foo" String string
new String("foo") String object
1.2 Number number
new Number(1.2) Number object
true Boolean boolean
new Boolean(true) Boolean object
new Date() Date object
new Error() Error object
[1,2,3] Array object
new Array(1, 2, 3) Array object
new Function("") Function function
/abc/g RegExp object
new RegExp("meow") RegExp object
{} Object object
new Object() Object object
参考:
一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量。这套规则被称为作用域。
let 与 var 的区别,这里有一个有趣的问题:let到底有没有提升?
let x; // 此时 x 为 undefined
x = 1;
{ // block scope
console.log(x) // Uncaught ReferenceError: x is not defined
let x = 2
}
let 在创建的时候会到块顶部,从块顶部到该变量的初始化语句,这块区域叫做 TDZ(临时死区)。初始化没有提升。
参考:
const:不一定是常量
const obj = {a:1}
obj.a=2
obj.b=2
是可行的,
const obj = {a:1}
obj = {a:2}
不可行
参考:https://read.douban.com/reader/ebook/12051836
[1] == [1] // false
两个数组是不同对象。
==
会做一次类型转换。
参考:Javascript 中 == 和 === 区别是什么? - 云澹的回答 - 知乎
https://www.zhihu.com/question/31442029/answer/53641960
关于传递引用和引用传递。
按值传递(call by value)是最常用的求值策略: 函数的形参是被调用时所传实参的副本。修改形参的值并不会影响实参。
参考:
浅拷贝和深拷贝也是一个点。