ES5中参数默认值的手动实现

ES5 中语法级别不支持在形参处直接指定默认值,

要想让参数有默认值,就要在函数的开头,给赋上默认值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* eg.0
* default value of parameter in ES5
*/
//-------------------------------------------------

function defaultVal(productCode, price) {
price = price || 99;

console.log(`Code: ${ productCode }, Price: ${ price }`)
}

defaultVal("BT-X") // Code: BT-X, Price: 99
defaultVal("BT-X", null) // Code: BT-X, Price: 99
defaultVal("BT-X", 0) // Code: BT-X, Price: 99
defaultVal("BT-X", false) // Code: BT-X, Price: 99
defaultVal("BT-X", 100) // Code: BT-X, Price: 100

//-------------------------------------------------

这里的 || 逻辑与运算符,并不用来得出一个真假的结果,

而是检查 price 是否有值,没值的时候就给它个 99 ,

实际上这存在一个问题,就是,

  • undifined
  • null
  • 0
  • false

的时候,都给 price 赋了默认值 99, 而我们期望的却不是,比如(只是比如),
只让它在 undefined 的情况下赋默认值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/* eg.1
* default value of parameter in ES5
*/
//-------------------------------------------------

function defaultVal(productCode, price) {
if(price === undefined) {
price = 99
}

console.log(`Code: ${ productCode }, Price: ${ price }`)
}

defaultVal("BT-X") // Code: BT-X, Price: 99
defaultVal("BT-X", null) // Code: BT-X, Price: null
defaultVal("BT-X", 0) // Code: BT-X, Price: 0
defaultVal("BT-X", false) // Code: BT-X, Price: false
defaultVal("BT-X", 100) // Code: BT-X, Price: 100

//-------------------------------------------------

这样,我们就达到了只在 undifined 时给与默认值的要求。(在上例的业务中不一定合理,但总可能有这样的要求,仅举此一例,其它类似)

ES6 中就可以直接给参数设默认了,具体请看 ES6参数详解


欢迎关注分享,一起学习提高吧。
QRCode/微信订阅号二维码
CoderPowerQRCode