2-2.JS基础

1. JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?

js定义了6种原始数据类型和对象这种复杂数据类型:

  • 原始数据类型
    • 数值(number):整数和小数;
    • 字符串(string):文本数据;
    • 布尔值(boolean):true和false两个特定值;
    • undefined:表示“未定义”或不存在,即此处目前没有任何值;
    • null:表示空缺,即此处应该有一个值,但目前为空,一般用作对象的占位符;
    • symbol(ES6);
  • 复杂数据类型
    • 对象(object):各种值组成的集合;包括数组(array)、函数(function)、对象(object)、正则表达式(regexp)等;
  • 区别
    • 复杂数据类型是多个原始数据类型的集合,原始数据类型不能再细分,不是对象也没有方法。

2. typeof和instanceof的作用和区别?

文献
1.MDN instaceof
2.MDN typeof
3.JavaScript instanceof 运算符深入剖析

作用:

  • typeof以字符串形式返回操作数的数据类型
//返回"number"
typeof 123
typeof NaN
//"string"
typeof '123'
typeof (typeof 1)
//"boolean"
typeof true
//"function"
typeof function(){}  
//"undefined"
typeof undefined  
//"object"
typeof null 
typeof {a:1} 
typeof [1,2] 
typeof /ss/ 
  • instanceof判断对象是否为特定的类型
var o = {};
var a = [];
o instanceof Array // false
a instanceof Array // true

function C() {}
var o = new C();
//true
o instanceof C;
//true
o instanceof Object;
  • 区别:
    typeof:一元运算符,返回值为字符串,难以判断object具体类型;
    instanceof:二元运算符,返回值为布尔型,主要用来判断object是否为特定实例。

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

如2代码示例

4. NaN是什么? 有什么特别之处?

NaN(Not a Number):非数字,不等于自己

NaN == NaN //false

5. 如何把非数值转化为数值?

parseInt()转换为整数、parseFloat()转换为浮点数、Number()都可以,但转换整个数据;

//忽略字符串前空格
//忽略第第一个非数字后的所有字符
//parseInt('',radix) 可以设置基数
//parseInt()     
parseInt('0ab')  //0
parseInt('01a')  //1
parseInt('  0a')  //0
parseInt('0xf1', 10)  //0
parseInt('-1a')  //-1
parseInt('0xf1')  //241十六进制不用加基数
//第一个非空非数字/±(±后无数字依然NaN),返回NaN
parseInt('-a')  
parseInt(null)  
parseInt(true)
parseInt(undefined)
parseInt('a')
----------------------------------------------------
//parseFloat()和parseInt()类似,只是会保留小数部分
parseFloat('-2.1a1a')  //-2.1
----------------------------------------------------
//Number()可以整数或小数,但会转换整个数据;并且会转换null,true,false
Number('1.2')  //1.2
Number('1.2a') //NaN
Number(true)  //1
Number(false)  //0
Number(null)  //0
Number(undefined)  //NaN
Number('a')
//其他
Number('\t\r')   //0 

6. ==与===有什么区别?

参考文献
1.JavaScript标准参考教程-阮一峰

== 类型不同,会先尝试转换类型再比较;
=== 类型一致,值相同。

//==相等
//字符串和布尔型比较会转换为数值,类型相同不会转换
true == 1  //true
false == 0  //true
true == 'true'  //false,'true'转化为NaN
'' == 0 //true
''==false //true
'' == '0'  //false
-----------------
//undefined与null与其他大多数比较都是false
undefined == null //true
undefined == 0 //false
null == 0 //false
undefined == false //false
null == false //false
-----------------
//其他
'  \t\t'  == 0   //true
//严格相等
1 === 0x1 // true
+0 === -0  //true
--------
//空对象
{} === {} // false
[] === [] // false
(function (){} === function (){}) // false
//未赋值变量
var a,b
a === b  //true

7. break与continue有什么区别?

break 跳出循环,用于循环和switch;
continue跳出本次循环,用于循环。

8. void 0 和 undefined在使用场景上有什么区别?

void运算一个表达式,返回defined,所以void 0 返回undefined;因为undefined在函数等中可以作为局部变量赋值,这会使判断值为undefined失效,所以判断中使用void 0代替它。

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

  • 当JavaScript遇到预期为数值的地方,就会将参数值自动转换为数值。系统内部会自动调用Number函数。
console.log(1+1);      //2  类型相同,都为数字,直接相加
console.log("2"+"4");  //24  类型相同,都为字符串,直接拼接
console.log(2+"4");    //6   类型不同,一个数字,一个字符串,转换为数字后相加
console.log(+"4");     //4 只有一个字符串运算子,也转换为数字

10.

var a = 1;  
a+++a;  //++优先级高于+,a++先运算,后自增,(a++)+a为2,a也为2
typeof a+2;  //4 typeof优先级高,(type a)+2,type a输出为"number",数字和字符串相加,所以值为“number2”

11.

var a = 1;
var b = 3;
console.log( a+++b );       (a++)+b,a++先运算,后自增,为1+3,输出4

12. 遍历数组,打印数组每一项的平方

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

13. 遍历对象, 打印里面的值

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
for (attr in obj){
  console.log(obj[attr])
}

14.

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0   //优先级typeof , +,  >, || , =
//"number"
//"number2"
//"number2" || true
//或运算符(||)的运算规则是:如果第一个运算子的布尔值为true,则返回第一个运算子的值,且不再对第二个运算子求值;如果第一个运算子的布尔值为false,则返回第二个运算子的值。
//"number2"
console.log(val)    //"number2"   

var d = 5;
var data = d ==5 && console.log('bb')  //优先级 == ,&& , =
//true && console.log('bb')
//打印bb
//因为第一个为true,所以会返回第二个运算子的值
console.log(data)  //undefined

var data2 = d = 0 || console.log('haha')  //优先级 || , =  其中=为右结合
//打印haha
//0 || consloe.log('haha') 
//因为0转换为false,所以返回第二个运算子的值,结果为undefined
console.log(data2)  //undefined
 
var x = !!"Hello" + (!"world", !!"from here!!"); //优先级 ()!+ ,
//true + (false, true)
//true + true转换为数值1+1
//2
console.log(x) //2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容