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

1、数据类型

1.1、JavaScript 定义了几种数据类型?

6+1
原始类型:null、undefined、number、string、bool、symbol(ES6)
复杂类型:object(function array)

常用的六种数据类型,分别是:
数值(number):整数和小数(比如1和3.14)
字符串(string):字符组成的文本(比如"Hello World")
布尔值(boolean):true(真)和false(假)两个特定值
未定义(undefined):表示“未定义”或不存在,即此处目前没有任何值
空对象(null):表示空缺,即此处应该有一个值,但目前为空
对象(object):各种值组成的集合

1.2、哪些是简单类型?哪些是复杂类型?

基本数据类型:

数值、字符串、布尔值称为原始类型(primitive type)的值,即它们是最基本的数据类型,不能再细分了。

复合数据类型:

将对象称为复杂类型(complex type)的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。

对象又可以分成三个子类型。

  • 狭义的对象(object)
  • 数组(array)
  • 函数(function)
  • 正则表达式 (regexp)
特殊数据类型:

空对象 Null
未定义 Undefined

2、运算符

  • 算数二元运算符 + - * / %
  • 字符串连接符 +
  • 比较运算符 == != === !== < > <= >=
  • 逻辑运算符 &&(与) ||(或)
短路特性/短路计算
console.log(null && "user")
// null
console.log("karl" && "user")
// user,且运算,从左往右返回第一个falsy值,若无falsy值,返回最后一个值

console.log(null || "user")
// user
console.log("karl" || "user")
// karl,或运算,从左往右返回第一个truthy值,若无truthy值,返回最后一个值
  • 一元运算符
- 表示负数
! 表示逻辑非
typeof 用于查询值的类型
  • 条件运算符(三元运算符)
console.log(true ? 1 : 2);
// 1,条件为真时取中间的值
console.log(false ? 1 : 2);
// 2,条件为假时取右边的值

位运算

| 按位或:不同为1
& 按位于:不同为0
^ 按位异或:相同为0,不同为1
~ 按位非:正数非后为负并+1;负数非后为正并-1

>> 按位右移(保留符号位)
>>> 按位右移 (不保留符号位)
<< 按位左移(数字加倍)

任何数与自己做位异或都将得到0
任何数与0按位异或都将得到自己

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

使用typeof进行判断

typeof 111 === 'number'
typeof '111' === 'string'
typeof true ==='boolean'
typeof a ==='function'

2.2、typeof和instanceof的作用和区别?参考

typeof +原始类型
instanceof +复杂类型

typeof:typeof运算符可以返回一个值的数据类型。

typeof "ABC";  //string
typeof true;  //boolean
typeof 112;  //number
typeof undefined; //undefined
typeof null;  //object

instanceof:typeof在运算一个引用类型时,总是返回object。不能判断这个引用类型是根据那个函数实例化的。这个时候就需要用到instanceof。instanceof判断一个对象是否是另一个函数(或对象)的实例。

var array=new Array(); 
console.log(array instanceof Array);   //true

var array = new Array();
console.log(array instanceof Object);  //=>true 也会返回true,因为Array是object的子类

array是Array函数的一个实例对象,同时也是Object函数的实例。

区别:typeof和instanceof的目的都是检测变量的类型,两个的区别在于typeof一般是检测的是基本数据类型,instanceof主要检测的是引用类型。
我们要判断一个对象是否是数组时或者判断某个变量是否是某个对象的实例则要选择用instanceof运算符,因为typeof遇到null、数组、对象时都会返回object类型。

2.3、NaN是什么? 有什么特别之处?

NaN(Not a Number):非数值,不可以描述的数字,比如0/1

undefined:“未定义”或不存在。
null:表示空值,即该处的值现在为空。比如,调用函数时,不需要传入某个参数,这时就可以传入null。

5个falsy值(不通过if):

  • undefined
  • null
  • 0
  • ' '
  • NaN

2.4、如何把非数值转化为数值?参考

在JavaScript中,有3个函数可以把非数值转换为数值,这三个函数分别是:

  • Number()
  • parselnt()
  • parseFloat()

第一个函数,即转型函数 Nurnber() 可以用于任何数据类型,而另两个函数则专门用于把字符串转换成数值。这3个函数对于同样的输入会返回不同的结果。

2.5、==与===有什么区别?

==用于一般比较,在比较的时候可以转换数据类型;
===用于严格比较,只要类型不匹配就返回flase。

推荐使用===

3、流程控制语句

do{

}while(){
  
}

3.1、break与continue有什么区别?

break 用于强制退出循环体,执行循环后面的语句
continue 用于跳过本次循环,执行下次循环

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

用 void 0 代替 undefined 避免 undefined 被重写

undefined 并不是保留词(reserved word),它只是全局对象的一个属性,在低版本 IE 中能被重写。
而void运算符的作用是执行一个表达式,然后返回的都是undefined,不能被重写。void 0最短,其实用void 1,void (1+1),void (0) 或者 void "hello",void (new Date()) 等等,都是一样的效果。

9.1、以下代码的输出结果是?为什么?运算符优先级参考

console.log(1+1);    //2
console.log("2"+"4");    //24   双引号中是字符串
console.log(2+"4");    // 24
console.log(+"4");    //4

9.2、以下代码的输出结果是?

var a = 1;
a+++a;    //3   ++的优先级高与+,相当于(a++)+a=1+2=3
typeof a+2;    //number2  typeof的算符优先级高于+,相当于是(typeof a)+2

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

 var a = 1;
 var b = 3;
 console.log( a+++b );    //4   ++的优先级高与+,相当于(a++)+b=1+3=4

9.4、遍历数组,把数组里的打印数组每一项的平方

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

9.5、遍历 JSON, 打印里面的值

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

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

var a = 1, b = 2, c = 3;
var val = typeof a + b || c >0    //typeof优先级最高,其次是+\>\||,相当于((typeof a)+b)||(c>0),或 前面部分不为0直接返回前面部分结果
console.log(val)    //number2


var d = 5;
var data = d ==5 && console.log('bb')    //bb  ==优先级最高,d==5为true,所以&&直接返回后面的值,由于调用了console.log('bb') ,所以输出bb
console.log(data)    //undefined  由于console.log()没有返回值,因此data=undefined,所以console.log(data)的输出结果为undefined


var data2 = d = 0 || console.log('haha')    //haha  
console.log(data2)    //undefined   上题同理
 

var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)    //2  !取反,!!再取反,空字符串为false,非空则为true,var x = true+(false+true),true为1,1+1=2
a++
++a
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容