专项练习24

目录

一、选择题

    1、JavaScript 中的数字在计算机内存中占多少个Byte?

    2、请问以下JS代码会输出什么

二、编程题

    1、以数字的形式返回数字参数向下取整的结果


一、选择题

1、JavaScript 中的数字在计算机内存中占多少个Byte?

A、2 Byte

B、4Byte

C、8Byte

D、16Byte

正确答案:C        你的答案:A

解析:

(1)关于Javascript中数字的部分知识总结

①Javascript中,由于其变量内容不同,变量被分为基本数据类型变量引用数据类型变量

  • 基本类型变量8字节内存,存储基本数据类型(数值、布尔值、null和未定义)的值
  • 引用类型变量则只保存对对象、数组和函数等引用类型的值的引用(即内存地址)

②JS中的数字是不分类型的,也就是没有byte/int/float/double等的差异

(2)JavaScript内部,所有数字都是以64位浮点数形式储存,即使整数也是如此


2、请问以下JS代码会输出什么
var a = 10; 
(function a() {
    a = 20;
    console.log(a); 
})()

A、10

B、20

C、undefined

D、输出函数a的内容

正确答案:D        你的答案:B

解析:

(1)本题存在变量提升函数提升

①一开始变量a被提升,值为undefined,由于函数提升优先级更高,所以a先被赋值为函数
②且是立即执行函数执行了函数a,输出a目前的值(即函数),之后才是被赋值为10

(2)函数可以在函数体中访问自己的标识符(函数名)

(3)普通函数可以修改变量名,立即执行函数不能修改变量名

①普通函数:

function a(){
    a = 34;
    console.log(a)   // 打印结果是34
}
a() 

②立即执行函数:

(function a(){
    a = 34;
    console.log(a)  //打印结果是函数a
})()

(4)详细解答函数不同情况的输出结果

①立即执行函数【不带参数】:如果有与变量相同的函数名,那么函数体内不可以修改函数名

(function add(){
    add = 100;//此行代码作废,无效,因为此行代码的意思是要修改函数名,此处是立即执行函数,不允许被修改!
    console.log(add);
})();

②立即执行函数【不带参数】:如果没有与变量相同的函数名,那么可以正常输出变量值

(function (){
    a = 100;// 此时的a成为全局变量,挂在到window上!
    console.log(a);//100
})();

 ③普通函数【不带参数】:如果有与变量相同的函数名,调用函数将报错

var add = 1;
function add(){
    add = 2;
    console.log(add);//2
}
add();

 ④普通函数【带参数】:变量的有效作用域

var a = 1;
function add(a=2){  
   console.log(a);//2  这地方的a在预解析变量声明提升处理完成后,最后一步会把同名的参数a的值2,赋值给变量a
   var a = 3;//该赋值仅在函数内有效
   console.log(a);//3  
}
add();
console.log(a)//1 

 ⑤普通函数【带函数参数】:执行函数传参的函数

<script>
    var a = 1;
    function add(a = 1, b = function () {
        a = 3;
        console.log(a);//3  修改的是参数体内的a!
    }) {
        b();
        console.log(a);//1 变量声明提升之后,被同名函数a覆盖,后又被同名参数a覆盖,最终值为1
        var a = 10; //该赋值仅在add()函数内有效
        console.log(a);//10    
    } 
    add();
    console.log(a)//1  最外层的a变量
</script>

二、编程题

1、以数字的形式返回数字参数向下取整的结果

解析:

(1)Math.floor()方法,向下取整

<script>
    let number = 23.46
    function _floor(number){
        return Math.floor(number)
    }
    console.log(_floor(number));
</script>

(2)Math.trunc()方法将数字的小数部分去掉,只保留整数部分

<script>
    let number = 23.46
    function _floor(number){
        return Math.trunc(number)
    }
    console.log(_floor(number));
</script>

(3)spliit()方法,字符串切割

<script>
    let number = 23.46
    function _floor(number){
        let arr = number.toString().split('.')
        return +arr[0]
    }
    console.log(_floor(number));
</script>

(4)parseInt()方法,转整型

<script>
    let number = 23.46
    function _floor(number){
        return parseInt(number)
    }
    console.log(_floor(number));
</script>

(5)~~两次按位取反

<script>
    let number = 23.46
    function _floor(number){
        return ~~number
    }
    console.log(_floor(number));
</script>

(6)>>右移位运算

<script>
    let number = 23.46
    function _floor(number){
        return number >> 0
    }
    console.log(_floor(number));
</script>

(7)

<script>
    let number = 23.99
    function _floor(number){
        return number-number%1
    }
    console.log(_floor(number));
</script>

猜你喜欢

转载自blog.csdn.net/qq_51478745/article/details/131648566