前端-笔试刷题-JavaScript

基本数据类型检测

  • 题目描述
    请补全JavaScript函数,要求以字符串的形式返回参数的类型。
    注意:只需检测基本数据类型。
点击查看代码

function _typeof(value) {
    // 补全代码
    return Object.prototype.toString.call(value).slice(8, -1).toLowerCase();
}

function _typeof(value) {
    // 补全代码
    return typeof(value);
}

**解析:** Object.prototype.toString.call()可以获取数据的类型, 返回的结果是[Object 数据类型]. 通过数组split的方法获得数据类型最后返回. 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317143042614-1744611801.png)

检查复杂数据类型

  • 题目描述
    请补全JavaScript函数,要求以Boolean的形式返回第一个参数是否属于第二个参数对象的实例。
点击查看代码
function _instanceof(left,right) {
    // 补全代码
    return Boolean(left instanceof right)
}
**解析:** instanceof是二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317143538378-1892415439.png)

数据类型转换

  • 题目描述
    请补全JavaScript函数,要求以字符串的形式返回两个数字参数的拼接结果。
    示例:
  1. _splice(223,233) -> "223233"
  2. _splice(-223,-233) -> "-223-233"
点击查看代码
function _splice(left,right) {
    // 补全代码
    return left+''+right
}
`function _splice(left,right) { // 补全代码 return String(left) + String(right) } ` **解析:** 根据题目要求,可以通过JavaScript隐式转换的特性,完成数字参数的拼接。在JavaScript中做加法运算,当遇到字符串值时,之后(包含当前字符串)的所有值都自动转换为字符串类型然后相加,结果为数值的链式拼接。 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317143812196-1095336794.png)

阶乘

  • 题目描述
    请补全JavaScript函数,要求返回数字参数的阶乘。
    注意:参数为大于等于0的整数。
点击查看代码
//在函数体内实现一个循环,完成阶乘计算。
function _factorial(number) {
	if(typeof number !== 'number') return
	if(number < 0) return
	for(let i=number-1 ; i>0 ; i--) {
		number *= i
	}
	return number
}

// for循环
function _factorial(number) {
    // 补全代码
    let res = 1;
    for(let i=1;i<=number;i++) {
        res *=i;
    }
    return res;
}

// while循环
function _factorial(number) {
    // 补全代码
    let res = 1;
    while(number>=1) {
        res *=number;
        number--;
    }
    return res;
}
//函数套函数
function _factorial(number) {
    // 补全代码
    if(number==1){
        return 1
    }else{
        return number*_factorial(number-1)
    }
}
`` **解析:** 根据题目要求实现一个阶乘函数,阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。由于阶乘是递归函数的典型示例,所以通过递归的思想,如:number * fn(number -1)展开为number * (number-1) * (number-2)... * 1,可以快速实现某个正整数的阶乘计算,函数内部条件判断为:

当参数等于0时,返回1。

当参数不等于0时,返回当前值与fn(当前值 - 1)的积。

整个函数的终止条件为:当参数为0时。

绝对值

  • 题目描述
    请补全JavaScript函数,要求返回数字参数的绝对值。
点击查看代码
function _abs(number) {
    // 补全代码
    //方法一:JS Math对象方法abs()求绝对值
    return Math.abs(number)
    //方法二:三元运算符
    return number >=0 ? number : -number
    //方法三:if条件判断
    if(number > 0)return number
    else{return -number}
}

  • 题目描述
    请补全JavaScript函数,要求返回底数为第一个参数,幂为第二个参数的数值。
点击查看代码
function _pow(number,power) {
    // 补全代码
    // 补全代码
    // methods1 Math.pow()方法
    return Math.pow(number, power); //method1
    
    // methods2 遍历相乘
    let x = 1;
    for(let i = 1; i <= power; i++) {
        x *= number;
    }
    return x;
    
    // methods3 递归  x^0 == 1
    return (power > 0) ? number * _pom(number, power -1) : 1/(number * _pom(number, power -1));
}

效果图:

平方根

  • 题目描述
    请补全JavaScript函数,要求返回数字参数的平方根。
点击查看代码
function _sqrt(number) {
    // 补全代码
    return Math.sqrt(number)
}
`function _sqrt(number) { // 补全代码
// 法一:调库 
return Math.sqrt(number);

// 法二:牛顿迭代法

if (number === 0 || number === 1) {
    return number
}
let r = number
while (r * r - number > 0.1) {
    // 逼近公式,证明略,此处照抄
    r = (r + number / r) / 2
}
let rr = Math.round(r) // 舍位进位
if (rr * rr === number) {
    return rr
} else {
    return Math.floor(r)
}

}
`

效果图:

余数

  • 题目描述
    请补全JavaScript函数,要求返回数字参数除以2的余数。
点击查看代码
function _remainder(value) {
    // 补全代码
    return value%2
}
`function _remainder(value) { // 补全代码 //return value - parseInt(value / 2) //return value % 2 //对2取余数 return value - (value >> 2) } `

效果图:

返回星期数

  • 题目描述
    请补全JavaScript函数,要求以字符串的形式返回数字参数所对应的星期。
    示例:
  1. _getday(1) -> "星期一"
  2. _getday(7) -> "星期天"
点击查看代码
function _getday(value) {
    // 补全代码
    let obj={
        1:'星期一',
        2:'星期二',
        3:'星期三',
        4:'星期四',
        5:'星期五',
        6:'星期六',
        7:'星期天',
    }
    return obj[value]
}

效果图:

从大到小排序

  • 题目描述
    请补全JavaScript函数,要求将数组参数中的数字从大到小进行排序并返回。
    function _sort(array) { if(array instanceof Array) return array.sort((left,right) => right - left) }
点击查看代码
// 法一:选择排序
function _sort(array) { 
    for(let i = 0; i < array.length; i++) {
        for(let j = i + 1; j < array.length; j++) {
            if(array[i] < array[j]) {
                let temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
    return array;
}

// 法二:冒泡排序
function _sort(array) {
    for(let i = 0; i < array.length; i++) {
        for(var j = 0; j < array.length - i - 1; j++) {
            if(array[j] < array[j + 1]) {
                let temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        } 
    }
    return array;
}

// 法三:数组排序方法
function _sort(array) {
    return array.sort((a,b) => b - a);
}

**解析:** 本题考点:排序、sort() 根据题目要求,需要将数组中的数字进行排序,常见的数组排序方法有很多,这里主要考察JavaScript原生数组排序sort()方法。sort()方法是对数组中的项目进行排序,默认按照字母和升序将数组中字符串进行排序,所以默认的sort()方法无法满足题目中对数字进行排序的要求。但sort()方法可以选择接收一个方法,这个方法可以定义并替代默认排序的规则。sort()方法比较两个值时,将两个值发送给可选接收的函数,根据函数内部自定义的规则,返回值为负数时,对两个参数进行颠倒排序。 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317151227495-1930151680.png)

大写字符串

  • 题目描述
    请补全JavaScript函数,要求将字符串参数转换为大写字符串并返回。
    function _touppercase(string) { // 补全代码 return string.toUpperCase() }
点击查看代码
function _touppercase(string) {
    // 1.return string.toUpperCase();
    // 2. "a".charCodeAt   String.fromCharCode(97)
    // 补全代码
    let newString = "";
    for(let i = 0; i < string.length; i++) {
        // 字符串:A-Z a - z 
        // a 97 z 122
        if(string[i].charCodeAt() >= 97 && string[i].charCodeAt() <= 122) {
            newString += String.fromCharCode(string[i].charCodeAt() - 32);
        }
        else {
            newString += string[i];
        }
        
    }
    return newString;
    
}
**解析:** 第一种最简单 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317151640334-1477775485.png)

** 对象属性键名 **

  • 题目描述
    请补全JavaScript函数,要求以数组的形式输出对象各个属性的键名。
    示例:
  1. _keys({name:'nowcoder',age:7}) -> ['name','age']
    注意:只需考虑对象属性均为原始数据类型的情况。
    function _keys(object) { // 补全代码 let keys = [],len=0 for(keys[len++] in object); return keys }
点击查看代码
function _keys(object) {
    // 补全代码
   let arr = [];
   for (let i in object) {
       arr.push(i)
   }
  return arr
}

function _keys(object) {
    // 补全代码
    return Object.keys(object)
}

效果图:

** 对象数字 **

  • 题目描述
    请补全JavaScript函数,要求将数字参数转换为对象的形式返回。
    示例:
  1. typeof number === 'number' -> typeof _numbertoobject(number) === 'object'
点击查看代码
function _numbertoobject(number) {
    // 补全代码
    return new Object(number) 
}

效果图:

**对象字符串 **

  • 题目描述
    请补全JavaScript函数,要求将字符串参数转换为对象的形式返回。
    示例:
  1. typeof string === 'string' -> typeof _stringtoobject(string) === 'object'
点击查看代码
function _stringtoobject(string) {
    // 补全代码
    return new String(string)
}

效果图:

** 去除字符串两端的空格 **

  • 题目描述
    请补全JavaScript函数,要求去除参数字符串两端的空格并返回。
点击查看代码
function _trim(string) {
    // 补全代码
     return string.trim();
}
function _trim(string) {
    // 补全代码
    return string.replace(/^\s|\s$/g,"");
}

**解析:** 第一种调方法 trim() 方法用于删除字符串的头尾空白符,空白符包括:空格、制表符 tab、换行符等其他空白符等。 trim() 方法不会改变原始字符串。 trim() 方法不适用于 null, undefined, Number 类型。 第二种正则表达式 // 1、利用RegExp对象创建正则表达式 // 注意反斜杠不能少 let regexp = new RegExp() // 2、利用字面量创建正则表达式 ,只要包含abc就为true let re = /abc/ //test()方法用于检测字符串是否符合规范 console.log(re.test(123)); // 边界符 ^ 以^开始 $以$结束 var rga = /^[a-z]$/ // 字符类 // 字符类:[] 表示一系列字符可以供你选择只要有一个就可以 var rg = /[abc]/ //表示只要有a或者b或者c就可以 // - 范围符号 var rga = /^[a-z]$/ //小写a-z任何一个 // 字符组合 var rge = /^[a-zA-Z0-9]$/ //只能输入26个英文字母或者数字 // 中括号里面有^表示取反 var rge = /^[^a-zA-Z0-9]$/ // 量词符 // * 相当于 >=0 可以出现0次或者多次 var reg = /^a*$/ // + 相当于 >=1 可以出现1次或者多次 var reg = /^a+$/ // ? 相当于 1 || 0 0次或者1次 var reg = /^a?$/ // {3} 就是重复3次 var reg = /^a{3}$/ // {3 ,} 就是大于等于3 var reg = /^a{3,}$/ // {3,6} 就是大于等于3小于等于6 var reg = /^a{3,6}$/ 效果图: ![](https://img2023.cnblogs.com/blog/2208309/202303/2208309-20230317153137176-1856986203.png)

** 输出日期 **

  • 题目描述

请补全JavaScript函数,要求以字符串的形式输出时间戳参数所对应的"年-月-日"。
示例:

  1. _date(1631159776311) -> '2021-9-9'
点击查看代码
function _date(number) {
    // 补全代码
     let date = new Date(number);
    // 注意月份要加1,因为是从0开始计算的
    return date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate();
}

效果图:

** 数字取整 **

  • 题目描述
    请补全JavaScript函数,要求返回数字参数的整数部分
点击查看代码
function _int(value) {
    // 补全代码
    // Math.floor() 返回一个小于或等于该给定数字value的最大整数
    return Math.floor(value)
}

效果图:

** 数组反转 **

  • 题目描述
    请补全JavaScript函数,要求将参数数组反转之后返回。
点击查看代码
function _reverse(array) {
    // 补全代码
    let l = 0, r=array.length - 1;
    while(l++ <= r--){
        [array[l], array[r]] =[array[r], array[l]];
    }
    return array;
}

function _reverse(array) {
    // 补全代码
     //创建一个新数组存放
    let newArr = [];
    //获取数组长度,因为数组索引从0开始,所以-1
    for(let i = array.length - 1; i >= 0; i--){
      //i--,从数组最后一个元素开始获取,存入新数组,达到逆转的目的
      newArr.push(array[i]);
    }
    return newArr
}

function _reverse(array) {
    return array.reverse()
}

效果图:

** 数组转字符串 **

  • 题目描述
    请补全JavaScript函数,要求将参数数组转换为字符串输出。
    示例:
  1. _join([1,'2',3]) -> "123"
    注意:只需考虑一维数组且数据类型为原始数据类型。
点击查看代码
function _join(array) {
    // 补全代码
     let str=''; //存储结果字符串
    for(let i=0, len=array.length; i<len; i++) { // 循环遍历
        str=str.concat(array[i]);  //   逐一追加
    }
    return str;
}

效果图:

** 数组最大值 **

  • 题目描述
    请补全JavaScript函数,要求找到数组参数中的最大值并返回。
    注意:数组中只包含数字。
点击查看代码
1.循环
function _max(array) {
    // 补全代码
    let max = array[0];
    for(let i=1;i<array.length;i++) {
        if(max<array[i]) {
            max = array[i]
        }
    }
    return max
}
2.先排序
function getMax(array) {
    // shift会改变原数组
    const newArr = array;
    newArr.sort(function(a,b){
        // b-a降序排序,a-b升序排序
        return b-a;
    })
    return newArr.shift()
}
3.数组的reduce方法
function getMax(array) {
    let max = array.reduce(function(max,cur){
        return max=max>cur?max:cur;
    })
    return max;
}
4.Math.max方法
function _max(array) {
    // 补全代码
     // max不能接受数组作为参数
    let max = Math.max(...array)
    return max;
}

效果图:

** 搜索数字 **

  • 题目描述
    请补全JavaScript函数,要求以boolean的形式返回字符串参数中是否包含数字。
点击查看代码
function _search(string) {
    // 补全代码
    return string.match('\\d') ? true : false
}
String.match(regexp) —— 返回字符串匹配正则表达式的结结果

function _search(string) {
    // .*匹配任意个数的字符  {1,}至少1位匹配
    let regExp = new RegExp('.*[0-9]{1,}.*')
    return regExp.test(string)
}


function _search(string) {
    let regExp = new RegExp('\\d')
    return regExp.test(string)
}
RegExp.test —— 执行一个检索,看正则表达式与字符串是否匹配,返回boolean


function _search(string) {
    return Array.from(string).some(el => el > 0 && el < 9)
}
数字和字符比较时,js将字符转为数字


function _search(string) {
    return Array.from(string).some(el => isNaN(el) === false)
}
Array.from —— 对一个类似数组或可迭代对象创建一个新的浅拷贝的数组实例
Array.some —— 测试数组中是否有元素通过了被提供的函数测试,返回boolean型值
isNaN —— ①是否Number类型 ②尝试转换为数值 ③判断是否NaN。非数值-true;数值-false 【不推荐isNaN,因为空字符串' '会在②转换为0,返回false。不知道为什么这测试居然能通过】

效果图:


  • 题目描述
点击查看代码

**解析:**

效果图:


  • 题目描述
点击查看代码

**解析:**

效果图:


  • 题目描述
点击查看代码

**解析:**

效果图:

posted @ 2023-03-17 16:26  权世界  阅读(15)  评论(0编辑  收藏  举报