1、且运算或运算---考点:逻辑操作
且运算符"&&"的运算规则是:如果第一个运算子的布尔值为true,则返回第二个运算子的值(注意是值,不是布尔值);
如果第一个运算子的布尔值为false,则直接返回第一个运算子的值,且不再对第二个运算子求值。
eg:返回参数 a 和 b 的逻辑且运算结果
function and (a,b){
return !!(a&&b);
}
返回的是布尔值;不加!!转义的话,若果a为布尔型,b不为布尔型,则返回的是b的值。
2、避免全局变量---考点:编码规范
在Javascript语言中,声明变量使用的都是关键字var,如果不使用var而直接声明变量,则该变量为全局变量。
ECMAScript 6 新增 const 和 let 命令,用来声明变量。
声明方式 | 变量提升 | 作用域 | 初始值 | 重复定义 |
const | 否 | 块级 | 需要 | 不允许 |
let | 否 | 块级 | 不需要 | 不允许 |
var | 是 | 函数级 | 不需要 | 允许 |
let
允许把变量的作用域限制在块级域中。与 var
不同处是:var 申明变量要么是全局的,要么是函数级的,而无法是块级的。
3、改变上下文---考点:对象
题目描述 考察:call() apply() bind() 改变上下文this
将函数 fn 的执行上下文改为 obj 对象
输入例子:
speak(function () {return this.greeting + ', ' + this.name + '!!!';}, {greeting: 'Hello', name: 'Rebecca'})
输出例子:
Hello, Rebecca!!!
1 2 3 4 5 6 7 |
|
注意:在JavaScript中,函数是一种对象,其上下文是可以变化的,对应的,函数内的this也是可以变化的,函数可以作为一个对象的方法,也可以同时作为另一个对象的方法,可以通过Function对象中的call或者apply方法来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数。将函数 fn 的执行上下文改为 obj 对象,只需要将obj作为call或者apply的第一个参数传入即可。
该方法的作用和 apply()
方法类似,只有一个区别,就是call()
方法接受的是若干个参数的列表,而apply()
方法接受的是一个包含多个参数的数组。
语法
fun.call(thisArg, arg1, arg2, ...)
参数
thisArg
在fun
函数运行时指定的this
值。需要注意的是,指定的this
值并不一定是该函数执行时真正的this
值,如果这个函数处于非严格模式下,则指定为null
和undefined
的this
值会自动指向全局对象(浏览器中就是window对象),同时值为原始值(数字,字符串,布尔值)的this
会指向该原始值的自动包装对象。
arg1, arg2, ...
指定的参数列表。
返回值
返回值是你调用的方法的返回值,若该方法没有返回值,则返回undefined
。
描述
可以让call()中的对象调用当前对象所拥有的function。你可以使用call()来实现继承:写一个方法,然后让另外一个新的对象来继承它(而不是在新对象中再写一次这个方法)。
4、乘法---考点:number
题目描述
求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
解答:(1)
function multiply(a, b) {
var LEN=len(a)+len(b);
return parseFloat(a*b).toFixed(LEN);
}
function len(num){
var NUM=""+num;
if(NUM.indexOf(".")==-1){
return 0;
}
else{
//return NUM.substring(NUM.indexOf(".")+1).length;
return NUM.length-NUM.indexOf(".")-1;
}
}
解答:(2)
//先判断两个数的小数点位数,然后用toFixed取得精度之和
function multiply(a, b) {
var _a=""+a;
var _b=""+b;
var _alen=_a.split(".")[1]?(_a.split(".")[1].length):0;
var _blen=_b.split(".")[1]?(_b.split(".")[1].length):0;
return parseFloat(a*b).toFixed(_alen+_blen);
}
综上:判断小数点后面的精度方法有:(1)用split(".")[1] ,注意整数没有返回值的情况。(2)用substring(indexOf(".")+1).length。(3)用字符串总长度-indexOf(".")-1
5、计数---考点:数组
题目描述
统计数组 arr 中值等于 item 的元素出现的次数
解答:
-
//filter()-->利用指定的函数确定是否在返回的数组中包含某一项
-
function count(arr, item) {
-
var count = arr.filter(function(a) {
-
return a === item; //返回true的项组成的数组
-
});
-
return count.length;
-
}
补充:
filter 方法 (Array) (JavaScript) 返回数组中的满足回调函数中指定的条件的元素。
-
array1.filter(callbackfn[, thisArg])
参数 |
定义 |
---|---|
array1 |
必需。 一个数组对象。 |
callbackfn |
必需。 一个接受最多三个参数的函数。 对于数组中的每个元素,filter 方法都会调用 callbackfn 函数一次。 |
thisArg |
可选。 可在 callbackfn 函数中为其引用 this 关键字的对象。 如果省略 thisArg,则 undefined 将用作 this 值。 |
一个包含回调函数为其返回 true 的所有值的新数组。 如果回调函数为 array1 的所有元素返回 false,则新数组的长度为 0。
-
//map()-->对数组中的每一项进行给定函数,
-
//返回每次函数条用的结果组成的数组;
-
function count(arr, item) {
-
var count = 0;
-
arr.map(function(a) {
-
if(a === item) {
-
count++;
-
}
-
});
-
return count;
-
}
-
//for循环
-
function count(arr, item) {
-
var count = 0;
-
for(var i=0; i<arr.length; i++) {
-
if(arr[i] === item) {
-
count++;
-
}
-
}
-
return count;
-
}
-
//reduce()-->从数组的第一项开始,逐个遍历到最后;
-
function count(arr, item) {
-
var count = arr.reduce(function(prev, curr) {
-
return curr === item ? prev+1 : prev;
-
}, 0);
-
return count;
-
}
补充:
reduce()reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
语法
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
.reduce(function(total, currentValue, currentIndex, arr), initialValue)
参数
参数 | 描述 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
function(total,currentValue, index,arr) | 必需。用于执行每个数组元素的函数。 函数参数:
|
||||||||||
initialValue | 可选。传递给函数的初始值 |
//forEach()-->对数组中的每一项运行传入的函数 function count(arr, item) { var count = 0; arr.forEach(function(a) { a === item ? count++ : 0; }); return count; }
补充:
forEach() 方法
定义和用法
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
语法
array.forEach(function(currentValue, index, arr), thisValue)
.forEach(function(currentValue, index, arr), thisValue)
参数
参数 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
function(currentValue, index, arr) | 必需。 数组中每个元素需要调用的函数。 函数参数:
|
||||||||
thisValue | 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值 |
返回值: | undefined |
---|
5、批量改变对象的属性:对象
题目描述
给定一个构造函数 constructor,请完成 alterObjects 方法,将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量。
解答:
这是原型链问题。访问一个对象的方法或者是属性,首先会在该对象中寻找,如果找到则返回,如果没找到,则在其原型链上面向上寻找,直至基原型,如还未找到,则返回undefined。将 constructor 的所有实例的 greeting 属性指向给定的 greeting 变量,只需要在constructor的原型上面添加greeting属性,并指定值。
1 2 3 |
|