15. 数据类型、运算符、流程控制语句

2017-09-02  本文已影响0人  Joey的企鹅

JavaScript 的数据类型

typeof和instanceof的作用与区别

typeof  123  \\ number
typeof  "abc"  \\ string
typeof  false  \\ boolean
function  f( ) { }
typeof  f  \\ funtcion
typeof  { }  \\ object
typeof  null  \\ object
typeof  undefined  \\ undefined

typeof应该注意的问题:
使用typeof操作符的时候,如果检测对象是函数,那么操作符返回"function" 。如果检测对象是正则表达式的时候,在Safari和Chrome中使用typeof的时候会错误的返回"function",其他的浏览器返回的是object。

var o = { };
var a = { };
o instanceof Array // false
a instanceof Array // true
>   [1,2,3] instanceof Array
<  ture
>  var obj = { }
<  undefined
>  obj instanseof Array
<  false
>  a+b
报错;
然而
>  typeof  b
<  "undefined"
**利用这一点,typeof可以用来检查一个没有声明的变量,而不报错**

实际编程中,这个特点通常用在判断语句:

//  错误的写法
if  (v) { }    //报错

//  正确的写法
if  (typeof v === "undefined") { }
不管 v 是否存在,都不报错

如何判断一个变量是否是数字、字符串、布尔、函数

使用typeof,看返回值

NaN

NaN含义是Not a Number,表示非数字,NaN和任何值都不相等,包括自己。

NaN == NaN;   // false
parseInt('abc');  // NaN

非数值转化为数值

number (false) //  0
number (true) //  1
number (123) //  123
number (null) //  0
number (undefined) //  NaN
number (0xe) //  14
number (" ") //  0
number ({toString:function( ){return '123'; }}) //  123
number ({valueOf:function( ){return 456; }}) //  456
parseInt('blue'); //  NaN
parseInt('-23ABS'); //  -23
parseInt('0xf1'); //  241
parseInt('101',2); //  5

==与===的区别

break与continue的区别

for (var i=1 ; i<10 ; i++) {
     if (i % 4 ===0) {
         break;
     }
     console.log(i);
}              // 1,2,3
for (var i=1 ; i<10 ; i++) {
     if(i % 4 ===0) {
        continue;
     }
     console.log(i);
}              // 1,2,3,5,6,7,9

void 0 和 undefined在使用场景上的区别

undefined可以在局部作用域中被重写,
而void运算返回值都是undefined。

function fn() {
    var undefined = 3;
    var a;
    if { a===undefined }{
        console.log('===')
    } else {
        console.log('!==')
    }
}
fn()           // !==
function fn() {
    var undefined = 3;
    var a;
    if { a===void 0 }{
        console.log('===')
    } else {
        console.log('!==')
    }
}
fn()           // ===

以下代码输出结果是什么?为什么?

console.log(1+1);      //2,数字相加
console.log("2"+"4");        //"24",字符串拼接
console.log(2+"4");       //"24",类型不同,转换为字符串,拼接
console.log(+"4");      //4,字符串转换为数字

代码分析

var a = 1;    //  a=1
a+++a;    //  相当于(a++)+a,a经过自增运算后为2,但(a++)为1,故该式为3
typeof a+2;    //  typeof优先级高于+,即相当于(typeof a)+2,即"number2"
 var a = 1;    //  a=1
 var b = 3;    //  b=3
 console.log( a+++b );    //  (a+++b)即((a++)+b),(a++)为1,1+3=4

遍历数组[3,4,5],把数组里的打印数组每一项的平方

var arr = [3,4,5];
for (var i = 0; i<arr.length; i++){
    console.log(arr[i]*arr[i])
}

遍历 JSON, 打印里面的值

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 ;
}

for (var key in obj) {
    console.log(obj[key]);
}

以下代码输出结果是? 为什么?

逻辑或(||):如果expr1能转换成true则返回expr1,否则返回expr2. 因此,在boolean环境(在if的条件判断中)中使用时, 二者操作结果中只要有一个为true,返回true;二者操作结果都为false时返回false.

逻辑与(&&):如果expr1 能转换成false则返回expr1,否则返回expr2. 因此, 在Boolean环境中使用时, 两个操作结果都为true时返回true,否则返回false.

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0   
/* 
(typeof a + b) = "number2" , "number2" || c >0则输出"number2" 
*/
console.log(val)    //  number2



var d = 5;
var data = d ==5 && console.log('bb')    //d ==5为ture,故data =console.log('bb')
console.log(data)    //console.log(data)=console.log(console.log('bb')),值为 undefined;



var data2 = d = 0 || console.log('haha')    
/*
相当于var data2 = d = (0 || console.log('haha'))
即data2 = console.log('haha')
*/
console.log(data2)    //console.log(data2)相当于console.log(console.log('haha')),即undefined
 


var x = !!"Hello" + (!"world", !!"from here!!");
/*
!!"Hello"为true
(!"world", !!"from here!!")即((!"world"), (!!"from here!!")),(false,true)→true
x = true + true = 1+1=2
*/
console.log(x)    //    2
上一篇下一篇

猜你喜欢

热点阅读