blog
blog copied to clipboard
数据类型运算符流程控制语句
1.JavaScript 定义了几种数据类型? 哪些是原始类型?哪些是复杂类型?原始类型和复杂类型的区别是什么?
-
6种原始类型:
StringNumberBooleanNullUndefinedSymbol(ECMAScript6新定义)
-
复杂类型:
Object(对象可以分成三个子类型)- 狭义的对象
- 数组
- 函数
-
区别:
- 原始类型:它们是最基本的数据类型,不能再细分;
- 复杂类型:就是一种无序的数据集合;一个对象往往是多个原始类型值的合成,可以看作是一个存放各种值的容器。
2.typeof和instanceof的作用和区别?
- 作用: typeof 和 instanceof 都能用来判断一个变量是否为空或者是什么类型的变量;
- 区别:
typeof:- 用来获取变量的类型。一般返回如下结果:number、boolean、string、undefined、function、 object。
- 判断一个变量是否存在。如:
if(typeof a! = 'undefined'){ };不要用if(a){ }因为如果a不存在(未声明)则会出错。 - 局限性。对于Array、Null等特殊对象使用typeof一律返回object,这个正是它在此的最大局限性。
instanceof:用来判断一个变量是否是某个对象的实例: 如:
var arr=new Array( ); console.log(arr instanceof Array); 返回turenote:这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。
参考:http://www.cnblogs.com/eoiioe/archive/2008/12/31/1366081.html
3.如何判断一个变量是否是数字、字符串、布尔、函数
if (typeof a === 'number'){ alert('ture') } //返回ture,证明数字;否则不是。
if (typeof a === 'string'){ alert('ture') } //返回ture,证明字符串;否则不是。
if (typeof a === 'boolean'){ alert('ture') } //返回ture,证明布尔;否则不是。
if (typeof a === 'function'){ alert('ture') } //返回ture,证明函数;否则不是。
4.NaN是什么? 有什么特别之处?
NAN是一个全局对象的属性;在编码很少使用,通常都是计算失败返回的值;如:
- 作为Math的某个方法返回值出现
Math.sqrt(-1) - 尝试解析一个字符串失败 parseInt("blabla")
等号运算符(==或===)不能判断一个值是否是NAN,必须用 Number.isNAN( ) 或 isNAN( ) 函数;并且NAN不等于它自己;
5.如何把非数值转化为数值?
- 部分值转换(只转换字符串的数字部分)
- parseInt( ) ;
- parseFloat( ) ;
parseInt 和 parseFloat区别:https://github.com/yongheng2016/blog/issues/29
- 全值转换(转换全部的字符串,所以字符串內只有全部是数字才会转换成功,否则返回NAN)
Number( ) ;'34' ;'34'-0 ;
6.==与===有什么区别
区别:简单说,它们的区别是相等运算符(==)比较两个值是否相等,严格相等运算符(===)比较它们是否为“同一个值”。如果两个值不是同一类型,严格相等运算符(===)直接返回false,而相等运算符(==)会将它们转化成同一个类型,再用严格相等运算符进行比较。
参考:http://javascript.ruanyifeng.com/grammar/operator.html#toc9
- 严格相等 === 全等操作符比较两个值是否相等,两个被比较的值在比较前都不进行隐式转换。如果两个比较的值类型不同,这两个值也是不全等的; 如果两个比较的值相等,类型也相同,并且都不是number类型时,两个值全等; 如果两个值都是number类型,当两个值不是NAN时,并且两个数值相等,或两者值分别是+0和-0,也是全等的;
- 非严格相等 == 相等操作比较两个值是否相等,比较前会隐式转换成相同类型;
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness
推荐使用===理由:https://zhuanlan.zhihu.com/p/22745278
7.break与continue有什么区别
break:立即终止、跳出循环语句或lable语句(如果不是再循环里面,lable是必写的,如果是标记的是语句块,break必须嵌套在它所引用的语句当中);
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/break
continue:和break类似,但不同的是;continue不会终止循环的迭代,而是- 在while循环中跳回到条件判断;
- 在for循环中跳转到更新语句;
参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/continue
8.void 0 和 undefined在使用场景上有什么区别
void:无论void后的表达式是什么,void操作符都会返回undefined
-
通过采用void 0取undefined比采用字面上的undefined更靠谱更安全,应该优先采用void 0这种方式。
-
填充的href确保点击时不会产生页面跳转; 填充
的src,确保不会向服务器发出垃圾请求。 - 希望点击的链接不会发生任何跳转,而是引发一些交互操作;如果不写url会刷新页面;所以这时用
href="javascript:void(0)的方式 - 如果我们要生成一个空的src的image,最好的方式似乎也是
src='javascript:void(0)';
- 希望点击的链接不会发生任何跳转,而是引发一些交互操作;如果不写url会刷新页面;所以这时用
undefined:undefined在javascript中不是保留字。可以赋值为其它值;
参考:https://segmentfault.com/a/1190000000474941
9.以下代码的输出结果是?为什么?
console.log(1+1); //2 两数字相加
console.log("2"+"4"); //24 +加号在字符串中起拼接符作用
console.log(2+"4"); //24 +加号在字符串中起拼接符作用
console.log(+"4"); //4 +正号转换字符串为数字
10. 以下代码的输出结果是?
var a = 1;
a+++a;
typeof a+2; //number2
11. 以下代码的输出结果是? 为什么
var a = 1;
var b = 3;
console.log( a+++b ); //4 (a++)+b
12.遍历数组,把数组里的打印数组每一项的平方
var arr = [3,4,5]
for (var i=0; i<arr.length; i++){
console.log( Math.pow( arr[i],2 ) );
}
13.遍历 JSON, 打印里面的值
var obj = {
name: 'hunger',
sex: 'male',
age: 28
}
for (var k in obj){
console.log( obj[k] );
}
14. 以下代码输出结果是? 为什么 (选做题目)
var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0 //(typeof a)+b 为ture 后面不看
console.log(val) //number2
var d = 5;
var data = d ==5 && console.log('bb') //(d==5) && _console.log('bb')_->undefined
console.log(data) //undefined
var data2 = d = 0 || console.log('haha') 0->false 看后面 console.log('haha')-console.log('haha')->undefiend
console.log(data2) //undefined
var x = !!"Hello" + (!"world", !!"from here!!"); // ture + ( false,ture) -> 1+1
console.log(x)