51.乘法
描述
求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
示例
输入:3, 0.0001
输出:0.0003
function multiply(a, b) {
//parseFloat 解析一个字符串,并返回一个浮点数
//toFixed 可以把Number四舍五入为指定小数位数的数字
return parseFloat((a*b).toFixed(10))
}
52.改变上下文
描述
将函数 fn 的执行上下文改为 obj,返回 fn 执行后的值
示例
输入:
alterContext(function() {return this.greeting + ', ’ + this.name + ‘!’; }, {name: ‘Rebecca’, greeting: ‘Yo’ })
输出:Yo, Rebecca!
function alterContext(fn, obj) {
//bind返回的是一个函数,因此需要立即执行
return fn.bind(obj)()
}
53.批量改变对象的属性
描述
给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
示例
输入:
var C = function(name) {this.name = name; return this;};
var obj1 = new C(‘Rebecca’);
alterObjects(C, ‘What’s up’); obj1.greeting;
输出:What’s up
注意读题
将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。 所有实例的某个属性都改变只需要改变这个构造函数的原型即可,即: constructor.prototype.gree
function alterObjects(constructor, greeting) {
constructor.prototype.greeting=greeting
}
54.属性遍历
描述
找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)
1、返回数组,格式为 key: value
2、结果数组不要求顺序
示例
输入:
var C = function() {this.foo = ‘bar’; this.baz = ‘bim’;};
C.prototype.bop = ‘bip’;
iterate(new C());
输出:[“foo: bar”, “baz: bim”]
function iterate(obj) {
//这里用keys或者getOwnPropertyNames都可
return Object.keys(obj).map(function(key){
return key+": "+obj[key];
})
}
55.判断是否包含数字
描述
给定字符串 str,检查其是否包含数字,包含返回 true,否则返回 false
示例
输入:‘abc123’
输出:true
//方法一
function containsNumber(str) {
for(var i=0;i<=10;i++){
if(str.indexOf(i)!=-1){
return true
}
}
return false
}
//方法二
function containsNumber(str) {
var reg=/\d/
return reg.