• Javascript专项练习


    Javascript专项练习——三
    一、输出结果

    var name="World!";
    (function(){
        var name;
        if(typeof name=== 'undefined'){
            name='Jack';
            console.log('Goodbye'+name);
        }
        else{
            console.log('hello'+name);
        }
    })();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行后弹出的值是:Goodbye Jack

    二、输出结果

    console.log(1+ "2"+"2");
    console.log(1+ +"2"+"2");
    console.log("A"- "B"+"2");
    console.log("A"- "B"+2);
    
    • 1
    • 2
    • 3
    • 4
    console.log(1+ "2"+"2");
    做加法时要注意双引号,当使用双引号时,JavaScript认为是字符串,字符串相加等于字符串合并。
    因此,这里相当于字符串的合并,即为122.
    
    console.log(1+ +"2"+"2");
    第一个+"2"中的加号是一元加操作符,+"2"会变成数值2,因此1+ +"2"相当于1+2=3.
    然后和后面的字符串“2”相合并,变成了字符串"32".
    
    console.log("A"- "B"+"2");
    A"-"B"的运算中,需要先把"A"和"B"用Number函数转换为数值,其结果为NaN,在减法操作中,如果有一个是NaN,则结果是NaN,因此"A"-"B"结果为NaN。
    然后和字符"2"进行字符串合并,变成了NaN2.
    
    console.log("A"- "B"+2);
    "A"-"B"结果为NaN,然后和数值2进行加法操作,在加法操作中,如果有一个操作数是NaN,则结果为NaN
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    三、显示的结果是

    var x = new Boolean(false);
    if (x) {
      alert('hi'); 
    }
    var y = Boolean(0);
    if (y) {
      alert('hello');  
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    if(x) 这里期望 x 是一个布尔类型的原始值,而 x 是一个对象。
    任何对象转为布尔值,都为得到 true
    
    • 1
    • 2

    切记!在 JS 中,只有 0,-0,NaN,“”,null,undefined 这六个值转布尔值时,结果为 false
    题目的第二部分
    一定要注意 y =Boolean(0),而不是 y = new Boolean(0)。这两个有很大区别,
    用 new 调用构造函数会新建一个布尔对象,此处没有加 new,进行的是显示类型转换,正如上述第一条所说,0 转换布尔,结果为 false,所以此时 y 的值就是 false。如果加了 new,那么 y 就是一个 Boolean 类型的对象,执行 if(y) 时,对象转布尔,始终是 true,所以结果会与不加 new 的时候相反。

    四、输出的结果为

    var one;
    var two = null;
    console.log(one == two,one === two);
    //true false
    
    • 1
    • 2
    • 3
    • 4

    变量one只声明未赋值,所以其值为undefined,在使用“==”对undefined和null进行比较时,不能将null和undefined转换成其他任何值,并且规定undefined == null返回结果为true,而使用“===”进行比较时,由于“===”需要严格区分数据类型,故undefined === null返回结果为False

    五、输出的结果是

    function fn(){
    	var num = 0;
    	return function(){
    		console.log(++num);
    	}
    }
    var fun = fn();
    
    fun(); ...fun(); ...
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    闭包需要满足以下特征:
    (1)有外层函数嵌套内层函数;
    (2)内层函数使用外层函数的局部变量;
    (3)内层函数返回外部,并且被全局变量保存
    匿名函数的this指向window对象;
    ++num为前置自增,因此①式输出1,又因为num为闭包变量,会保存在内存中,再次调用fun()会继续自增,因此②式输出2。

    六、正则表达式

    var str = "Hellllo world";
    str = str.replace(/(l)\1/g, '$1');
    
    • 1
    • 2
    1、定义
    (l)表示第一个分组里有l
    \1表示所获取的第1个()匹配的引用
    /g表示全局匹配
    $1表示第一个分组里的值l
    2、所以
    (l)\l 表示匹配两个连续字符ll,即ll
    (l)\l/g 表示全局匹配两个连续字符ll即llll
    str.replace(/(l)\1/g, '$1') 表示将ll替换成l
    3、最终
    Hellllo =》 Hello
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 基本数据类型:Number,String,Boolean,Undefined,Null
    • 复杂数据类型:Object,Array,Function,RegExp,Date,Error
    • 全局数据类型:Math
    • 内置类型(Built-in)Null Undefined Boolean Number String Object Symbol
      7种
    • 原始类型(Primitives)Null Undefined Boolean Number String Symbol 6种
  • 相关阅读:
    40个高质量SSM毕设项目分享【源码+论文】(五)
    随手笔记(四十五)——idea git冲突
    获取板块分类并展示
    Caddy Web服务器深度解析与对比:Caddy vs. Nginx vs. Apache
    【LeetCode 每日一题】7. 整数反转
    Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
    神经网络学习的基本原理
    Pr 入门系列之三:挑选与添加剪辑到序列
    八股文复习
    【回归预测】基于萤火虫算法优化模糊实现数据回归预测附matlab代码
  • 原文地址:https://blog.csdn.net/m0_46672781/article/details/126454583