js基础知识05习题课(这就是八股文吗?i了i了)

赋值不是覆盖

	var a=12;
	a=13;

①先创建一个变量a,在值存储区域创建12,a指向12
②在值存储区域创建13,a指向13(此时12没有被销毁)

一.问答题

1.JS中常用的数据类型有哪些?

基本数据类型(值类型):number string boolean null undefined symbol

引用数据类型:1.object({普通对象},[数组对象],/正则对象/,数学函数对象Math,日期对象Data,类数组对象getElementByTagName) 2.function

2.浏览器中常用的内核有哪些?

webkit 谷歌,手机端pc端大部分
gecko 火狐
presto 欧朋
trident IE

3.数据类型之间的区别?

基本数据类型按值操作,引用类型操作的是堆内存的空间地址

4.列举常用的关键字和保留字ES6

关键字:break 、continue、if else 、for、var、let、const、function、class、import、typeof、this、return、switch、case、do while、delete、new

保留字:boolean、float、int、double、long、char、debugger

5.JS中创建变量的几种常用方式?

var /let 创建变量
const创建常量
function创建函数
class创建类
import模块导入

二.写输出

1.写出下面结果输出的答案(阿里,难)

  let a = {
      n: 1
  };
  let b = a;
  a.x = a = {
      n: 2
  };
  console.log(a.x);  //undefined
  console.log(b);  // {n: 1, x: {n: 2}}

在这里插入图片描述

2.写出下面结果输出(一眼顶针!)

js中加法有特殊情况,相加过程中遇到字符串直接变为字符串拼接

var a = 'abc' + 123 + 456; //abc123456
var b = '456' - '123';  //333

var c = 100 + true + 21.2 + null + undefined + "Tencent" + [] + null + 9 + false;  
//NaNTencentnull9false

//100 + true(1) + 21.2 + null(0) =122.2
//100 + true + 21.2 + null(0) + undefined(NaN)=NaN
console.log(a, b, c);

3.写出下面结果输出(顶针倒了)

NaN不等于NaN
typeof NaN 输出 ‘number’

    var str = 'abc123';
    var num = parseInt(str);  //NaN
    if (num == NaN) {    //NaN不等于NaN
        alert(NaN); 
    } else if (num == 123) {
        alert(123);
    } else if (typeof num == 'number') {
        alert(' number');  // 'number'
    } else {
        alert('str');  
    }

4.写出下面结果输出(一眼顶针!)

   var a = 0;
   var b = a;
   b++;  //
   alert(a);  //0
   var o = {};
   o.a = 0;
   var b = o;
   b.a = 10;
   alert(o.a)  //10

5.输出字符串’1’的有哪些(顶针倒了)

A.alert(1) //alert要转化为字符串输出 '1'
B.console.log(parseInt(1.3))  //数字1
C.console.log(1)  //数字1
D.console.log(isNaN(1))  //flase
E.console.log(parseInt("1"))  //数字1

6.输出undefined的有哪些(顶针倒了)

A.console.log(alert(1))  // alert(1):执行浏览器内置的alert方法,
执行方法的时候弹出一个"1"(方法的功能),此方法没有返回值(默认返回值undefinedB.typeof undefined  //输出 'undefined' 字符串
C.console.log(parseInt(undefined)) //NaN
D.isNaN(undefined)  //true

在这里插入图片描述
在这里插入图片描述

7.输出true的有哪些(?顶针倒了)

A.isNaN(null)  //false  null-->0, undefined-->NaN
B.isNaN(parseInt(null))  //true
C.Number(null)  //0
D.parseFloat(null)  //NaN

8.输出结果

  parseInt("")        //NaN
  Number("")          //0
  isNaN("")           //false
  parseInt(null)    NaN
  Number(null)        // 0
  isNaN(null)       // false
  parseInt("12px")   //12
  Number("12px")    NaN
  isNaN("12px")    true

9.输出结果

    if (isNaN(NaN) == "") {  // isNaN(NaN)  true
        console.log("你好")
    } else {
        console.log("呵呵")  呵呵
    }

10.输出结果

    let x = [1, 2, 3]; 
    let y = x;
    let z = [4, 5, 6]; 
    y[0] = 10;  //y:[10,2,3]
    y = z;   //z=y=[4,5,6]
    z[1] = 20;  
    x[2] = z = 30;  
    console.log(x, y, z);

在这里插入图片描述

三.扩展题

1.浏览器常用的输出方式,除了console.log还有哪些

1.console.log/dir/table…在控制台输出
  let a = 10;
  let b = [{
      id: 1,
      name: 'zhangsan'
  }, {
      id: 2,
      name: 'lisi'
  }]
  console.log(a);
  console.dir(b);
  console.table(b);

在这里插入图片描述
console是一个object(对象),他的方法有log(),table(),dir()…

可以使用console.dir(console)查看console有哪些对象
在这里插入图片描述

2.浏览器弹窗输出(3种)

三种方式输出的结果都必先经过toString转换为字符串,再弹出
三种方式会阻断代码执行,只有当窗口关掉,JS才会继续运行

alert() alert输出的内容都要先toString, 转化为字符串,在输出
			如果是alert({name:'zhangsan'})会弹出[object Object]
			
confirm()  确定取消,确定和取消
prompt()   带输入框的,确定和取消
3.document.write在页面中写入(不用)

document.write(‘qqqqqqqqqqq’);
和alert一样,输出的结果都是字符串

2.script 标签放到页面头部和尾部的区别,以及解决办法?

注意事项: 放到头部,可能导致无法获取到需要操作的元素
一般把js放到body最后面,是为了保证页面结构加载完成才去做这些事情

可以使用window.onload(一个页面只能用一次)
事件:当页面中的结构和内容都加载完成才会执行这里面的代码

window.onload = function () {
//事件:当页面中的结构和内容都加载完成才会执行这里面的代码
//jQ中也有一个对应的方法$( document).ready(function(){})
	let box = document.getElementById('box');
	box.style.color = 'orange' ;
}

四.习题

4.1.输出下面程序运行的结果

    for (var i = 0; i < 10; i++) {
        console.log(i);  
        break;
    }
    console.log(i);  

0
0

4.2.输出下面程序运行的结果

    for (var i = 0; i < 10; i++) {
    	continue;
        console.log(i);    //不输出
    }
    console.log(i);

不输出
10

4.3.输出下面程序运行的结果

   for (var i = 1; i <= 10; i += 2) {
       if (i <= 5) {
           i++;      // 7
           continue;
       } else {
           i -= 2;     //5
           break;
       }
       i--;      
       console.log(i);   //不输出
   }
   conso1e.log(i);   //5

4.4.输出下面程序运行的结果

    for (var i = 3; i < 12; i++) {
        if (i < 3) {
            i++;  
            break; 
        }
        if (i > 9) {
            i += 2; 
            continue;
        }
        i--;
    }
    console.log(i);  

死循环,不会结束,无输出

4.5将下面程序改为三目运算

八股文(太正宗了!!!)

   let a = 12;
   if (a >= 0 && a <= 20) {
       if (a % 2 === 0) {
           a += 2;
       }
   } else {
       a -= 2;
   }
   console.log(a);
   
a >= 0 && a < = 20 ? (a % 2 === 0 ?a += 2 : null) : a -= 2;

4.6写输出

    let a = typeof typeof typeof [12, 23];
    console.log(a); 
    
typeof [12, 23]--> 'object'
typeof '[object object]'--> 'string'
typeof 'string'--> 'string'




4.7写输出(?经典八股?)

10==‘10’ -->true; == :相等,数据类型不同,先转换为一样的再比较
10===‘10’ -->false; ===:绝对相等,必须类型和值都相同才为true

let a=‘10’
a+1–>‘101’ i+=1–>‘101’
++a //11 i++和以上两种不完全一样,他是纯粹的数学运算
i–无所谓,--不用考虑字符串拼接

let i=1;
5+(i++)    =>先算5+i=6  然后i再加1(i=2)

i=1;
5+(++i)    =>先i累加1,然后拿累加后的结果去和5运算5+27
    let a = '10';
    a == 10 ? a++ : a--;
    console.log(a);  //11
    
   //  let a= '10';
   //  ++a;//11


    let b = '10';
    switch (b) {
        case 10:
            b++;
            break;
        default:
            b--;
    }
    console.log(b);  //9

五.实现颜色 白–>红–>绿–>蓝–>黑–>白–>红…

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body style="background-color: white;">
    <button id="btn">循环变色白-->-->绿-->-->-->....</button>

    <script>
        var body = document.body;
        var btn = document.getElementById('btn');

        /******************方法二开始**********************/

        var ary = ['white', 'red', 'green', 'blue', '#888'];
        var i = 0;
        btn.onclick = function () {
            i++;
            i > ary.length - 1 ? i = 0 : null;
            body.style.backgroundColor = ary[i];
        }

        /******************方法二结束**********************/



        /******************方法一开始**********************/
        // btn.onclick = function () {
        //     let bg = body.style.backgroundColor;
        //     //获取当前的背景颜色元素.style.xxx只能获取行内样式(颜巴仕样式中使用16进制方式,JS中获取到的是RGB的值)
        //     console.log(bg);
        //     switch (bg) {
        //         case 'white':
        //             body.style.backgroundColor = 'red';
        //             break;
        //         case 'red':
        //             body.style.backgroundColor = 'green';
        //             break;
        //         case 'green':
        //             body.style.backgroundColor = 'blue';
        //             break;
        //         default:
        //             body.style.backgroundColor = 'white';
        //     }
        // }
        /********************方法一结束*****************/

    </script>
</body>


</html>

六.扩展题(?面试官看了都摇头?)

!(!"Number(undefined)");  
true  boolean转化只有0NaNNULLundefined,''会变为false


isNaN(parseInt(new Date()) + Number([1]) + typeof undefined;
true(1)+1+undefined=2undefined



Boolean(Number("")) + !isNaN(Number(null)) + Boolean("parseInt([])") + typeof !(null);
false+true+true+'boolean'=0+1+1+'boolean'=2boolean


parseF1oat("1.6px") + parseInt("1.2px") + typeof parseInt(null);
1.6+1+'number'=2.6number


isNaN(Number(! !Number(parseInt("0.8"))));
false


console.log(1 + "2" + "2");
122

!typeof parseFloat("O");
! 'number'=false

Number("");
0


typeof "parseInt(nu11)" + 12 + !!Number(NaN);
Number(NaN)-->NaN,
! 先转化为boolean再取反
!!(NaN)-->false
'string'+12+false=string12false



!typeof (isNaN("")) + parseInt(NaN);
false+NaN=NaN


typeof !parseInt(null) + !isNaN(null);
'boolean'+true=booleantrue



七.扩展题

.某个公司要给员工发年终奖,为了奖励老员工,所以工作时间越长,发的越多,规则如下:
工作满0年,发月薪的1倍月薪年终奖,如果月薪大于8000 ,那么就是发1.2倍
工作满1年,发月薪的1.5倍月薪年终奖,如果月薪大于10000,那么就是发1.7倍
工作满2年甚至更多 ,发月薪的3倍月薪年终奖,如果月薪大于12000,那么就是发3.2倍
编写JS程序,当用户输入自己的工作年限薪资后,计算并且输出应得的年终奖~~

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    工作年限: <input type="text" name="workyear" id="workyear"><br>
    工资:<input type="text" name="sal" id="sal"><br>
    <button id="btn">计算年终奖</button><br>
    你的年终奖是: <span id="reward"></span>

    <script>
        var workyear = document.getElementById('workyear');
        var sal = document.getElementById('sal');
        var submit = document.getElementById('btn');
        var reward = document.getElementById('reward');

        submit.onclick = function () {
            //1.获取输入的年限和工资数据,并转化为数字类型(蓝色)
            var year = parseInt(Number(workyear.value));
            var gongzi = parseInt(Number(sal.value));
            if (isNaN(year) || isNaN(gongzi)) {
                alert('请输入正确数据')
                return;
            }
            console.log(year, gongzi);

            //2.处理
            let result = null;

            switch (year) {
                case 0:
                    result = gongzi > 8000 ? gongzi * 1.2 : gongzi;
                    break;
                case 1:
                    result = gongzi > 10000 ? gongzi * 1.7 : gongzi * 1.5;
                    break;
                default:
                    result = gongzi > 12000 ? gongzi * 3.2 : gongzi * 3;
            }

            //3.结果赋值给#reward
            reward.innerHTML = result;
        }



    </script>


</body>

</html>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值