为了账号安全,请及时绑定邮箱和手机立即绑定

变量与数据类型,有疑问的几个,望大佬们解释下

变量与数据类型,有疑问的几个,望大佬们解释下

fancyL 2018-01-25 08:57:53
var message = "some string"; console.log(typeof massage);    // "undefined" console.log(Number("1234S"));   // NaN console.log(3.14E-7 === 0.000000314);   // true console.log(0.1 + 0.6 === 0.7);         // true console.log(0.1 + 0.7 === 0.8);         // false
查看完整描述

3 回答

?
fancyL

TA贡献6条经验 获得超0个赞

// 挑战二
var nums = [12,32,54,56,78,89];
for(var n in nums){
    console.log(n);  // 0,1,2,3,4,5
}
// 挑战三
function showCase(value) {
    switch (value) {
        case 'A':
            console.log('Case A');
            break;
        case 'B':
            console.log('Case B');
            break;
        case undefined:
            console.log('undefined');
            break;
        default:
            console.log('Do not know!');
    }
}
showCase(new String('A'));   // "Do not know!"

如何解释??

查看完整回答
反对 回复 2018-01-25
  • 林逸舟丶
    林逸舟丶
    for(var n in nums),n定义的是数组的下标,即从0开始一直到nums.length-1,所以输出是0,1,2,3,4,5,如果是console.log(nums[n]),才会输出你预期的12,32,54,56,78,89
  • 林逸舟丶
    林逸舟丶
    new String返回的是一个对象,即类型是object,而case对比的是一种常量,在这里是对应的“String”类型,case会对比类型是否相同,如果showCase(new String('A')[0])就能正常输出Case A,因为传参是string类型
?
林逸舟丶

TA贡献124条经验 获得超28个赞

挑战六:

console.log(1 && 3);            // 3
console.log(1 && "foo" || 0);   // "foo"
console.log(1 || "foo" && 0);   // 1

“&&”运算:两边都为真,返回后者,如果为假,返回“假”,即:

console.log(3 && 1)         //1
console.log(0 && 3)         //0
console.log(3 && 0)         //0

//img1.sycdn.imooc.com//5a6994b7000136d306700284.jpg

挑战七:

// 挑战七
var a=1;
var b=(a=(2,4,6))+a++
console.log(b);     // 12  b=(6)+a++  ==12

其中(a=(2,4,6))的(2,4,6)是逗号表达式,逗号表达式只返回最后一个逗号后面的操作数,这里是6,(3,2,1)则返回1,之后其实执行的是赋值,即a=6,再执行6+a,因为a被重新赋值,所以这里a也是6,即6+6,至于a++后面的自增,需要在执行6+6之后才运算,所以在这里其实是不起实际作用的,最后b是12,a是7

//img1.sycdn.imooc.com//5a6994a70001e0f406700266.jpg

 // 挑战八

 if (!("a" in window)) {
     var a = 1;
 }

原理是因为“var”拥有“提前”特性,详情百度。

 // 挑战九

三元表达式,“exp?true:false”如果表达式exp为真,就返回冒号之前,否则返回之后

 // 挑战十

一个计算符嵌套,“负负得正”,结果加1

查看完整回答
反对 回复 2018-01-25
  • fancyL
    fancyL
    // 挑战二 var nums = [12,32,54,56,78,89]; for(var n in nums){ console.log(n); // 0,1,2,3,4,5 } // 挑战三 function showCase(value) { switch (value) { case 'A': console.log('Case A'); break; case 'B': console.log('Case B'); break; case : console.log('undefined'); break; default: console.log('Do not know!'); } } showCase(new String('A')); // "Do not know!" 如何解释?
?
fancyL

TA贡献6条经验 获得超0个赞

   // 挑战六

    console.log(1 && 3);            // 3

    console.log(1 && "foo" || 0);   // "foo"

    console.log(1 || "foo" && 0);   // 1

    // 挑战七

    var a=1;

    var b=(a=(2,4,6))+a++

    console.log(b);     // 12  b=(6)+a++  ==12

    // 挑战八

    if (!("a" in window)) {

        var a = 1;

    }

    console.log(a);     // undefined,因为!结果为false,所以不会执行赋值语句,alert(a) 返回 undefined

    // 挑战九

    var val = 'smtg';

    console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');  // "Something"

    // 挑战十

    console.log(1 + - + + + - + 1);  // 2,1+(-(+(+(+(-(+1))))))

您看这样解释对吗?还有第二题和第六题如何解释??


查看完整回答
反对 回复 2018-01-25
  • 3 回答
  • 0 关注
  • 2115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信