目录
1、关于JavaScript的说法,下列选项中,错误的是()
4、对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?
一、选择题
1、关于JavaScript的说法,下列选项中,错误的是()
A、JavaScript是一种动态类型,弱类型,基于原型,直译式的脚本语言
B、JavaScript是一门多线程的语言
C、浏览器端的JavaScript包含ECMAScript,DOM对象以及BOM对象
D、JavaScript语言不仅可以在浏览器环境运行,也可以在node.js提供的服务器端平台运行
正确答案:B 你的答案:A
解析:
(1)JavaScript语言最大的特点就是单线程,在某个特定时刻,只有特定的代码能够被执行
(2)JavaScript 是一种专门为与网页交互而设计的语言,由下列三个不同的部分组成:
- ECMAScript,提供核心语言功能
- 文档对象模型(DOM),提供访问和操作网页内容的方法和接口
- 浏览器对象模型(BOM), 提供与浏览器交互的方法和接口
2、以下代码将返回:
Number(null);
A、Null
B、0
C、undefined
D、1
正确答案:B 你的答案:C
解析:
(1)Number()可以用于任何数据类型的转换,null、empty、0, Number() 默认把其转化为0
(2)转换规则如下:
①如果是Boolean值,true和false将分别被转换为1或0
②如果是null值,返回0
③如果是undefined,返回NaN
④如果是字符串则遵循以下规则
- 字符串只把含数字(包含前面带正号或负号的情况),则将其转换为十进制数值,前导零会被忽略(例如“011”会变成11)
- 如果字符串中包含有效的浮点格式,则将其转换为相应的浮点数值,前导零会被忽略
- 如果字符串中包含十六进制格式,则将其转换为相同大小的十进制整数;//number("01f")=31;
- 如果字符串是空的,则将其转换为0;//number(" ")=0
- 如果字符串中包含除以上格式之外的字符,则将其转换为NaN //number("helloworld")=NaN
⑤如果是数值,传啥返啥
⑥如果是对象,则调用对象的 valueOf() 方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用对象的 toString() 方法,然后再次按照前面的规则转换返回的字符串值
(3)下面几个都会转化为0
Number() Number(0) Number('') Number('0') Number(false) Number(null) Number([]) Number([0])
(4)其他转换例子
console.log(Number(undefined)); //NaN
console.log(parseInt("")); //NaN
console.log(parseInt(null)); //NaN
console.log(parseInt(undefined)); //NaN
console.log(null == 0); //false
console.log(undefined == 0); //false
(5)注意
不要跟 boolean() 的转换弄混,在 boolean() 的转换中 ""、0、-0、NaN、null、undefinded会被转换为 false ,[]会转换为 true,但在 number() 里 [] 会转换为0
3、执行以下代码,输出结果为()
console.log(1);
let a = setTimeout(() => {console.log(2)}, 0);
console.log(3);
Promise.resolve(4).then(b => {
console.log(b);
clearTimeout(a);
});
console.log(5);
A、1 2 3 4 5
B、1 3 4 5
C、1 3 5 4
D、1 3 5 4 2
正确答案:C
解析:
(1)promise 对象的 then() 方法属于微任务,而setTimeout()定时器函数为宏任务
(2)在执行顺序处理上,js会先执行所有同步代码,然后执行微任务队列中的所有微任务,最后再继续执行宏任务
(3)本题中,先执行同步代码并输出1 3 5,接着执行Promise.resolve().then()方法,输出4,由于在then()方法内删除了定时器函数,所以不会再输出2,最终输出结果为1 3 5 4
4、对于代码 var a = 10.42; 取出 a 的整数部分,以下代码哪些是正确的?
A、parseInt(a);
B、Math.floor(a);
C、Math.ceil(a);
D、a.split('.')[0];
正确答案:AB 你的答案:ACD
解析:
A:parseInt 转换为整数,默认为10进制,结果为10
B:floor 向下取整,结果为10
C:ceil 向上取整,结果为11
D:split 操作数必需为正则或字符串,结果为TypeError
二、编程题
1、将参数数组反转之后返回
解析:
(1)reverse()反转
<script>
let arr = [12,23,34,45,56,67]
function _reverse(arr){
return arr.reverse()
}
console.log(_reverse(arr));
</script>
(2)普通for循环,从后往前遍历原数组,然后push()到新数组
<script>
let arr = [12,23,34,45,56,67]
function _reverse(arr){
let newArr = []
for(let i = arr.length-1;i>=0;i--){
newArr.push(arr[i])
}
return newArr
}
console.log(_reverse(arr));
</script>
(3)sort()比较大小,当函数为负数a,b交换位置,所以当return的小于0即-1时,可以实现倒序
<script>
let arr = [12,23,34,45,56,67]
function _reverse(arr){
return arr.sort((a,b)=>-1)
}
console.log(_reverse(arr));
</script>
(4)双指针for循环
<script>
let arr = [12,23,34,45,56,67]
function _reverse(arr){
for(let i=0,n=arr.length-1;i<=n;i++,n--){
[arr[i],arr[n]] = [arr[n],arr[i]]
}
return arr
}
console.log(_reverse(arr));
</script>
(5)while()
<script>
let arr = [12,23,34,45,56,67]
function _reverse(arr){
let i = 0,n=arr.length - 1
while(i++ <= n--){
[arr[i],arr[n]] = [arr[n],arr[i]]
}
return arr
}
console.log(_reverse(arr));
</script>