JS基础

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

JavaScript定义了如下数据类型:
1.数值(number):整数和小数(如1、2、3、3.14);
2.字符串(string):由字符组成的文本,又单引号或双引号括起来(如'hellow');
3.布尔值(boolean):只有true和false两个特定值;
4.undefined:表示“未定义”或不存在,即此处目前没有任何值;
5.null:表示空缺,即此处应该有一个值,但目前为空;
6.对象(object):对象是属性的集合,每个属性都由“名/值对(值可以为数值,字符串,也可以忽视对象)”构成。对象又可以分为普通对象、数组和函数。

数值、字符串、布尔值称为原始类型,对象称为对象类型或复杂类型,null和undefined一般看作特殊的类型。

原始类型和复杂类型的区别:
1.原始类型的值是不可变的,复杂类型的值是可变的;
2.原始类型的比较是值的比较,复杂类型的比较是引用的比较;
3.原始类型的变量是存放在栈区的,.复杂类型的值是同时保存在栈内存和堆内存中的对象。

  • typeof和instanceof的作用和区别?

typeof可以判断一个值的数据类型:

typeof 123 // "number"  /*数值返回"number"*/
typeof '123' // "string"   /*字符串返回"string"*/
typeof false // "boolean"   /*布尔值返回"boolean"*/

 /*函数返回"function"*/
 function f() {}
typeof f
// "function"

 /*undefined 返回 undefined*/
 typeof undefined
// "undefined"

 /* 其余的返回object*/
typeof window // "object"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"

但是typeof不能识别数组和对象,上面例子中数组和对象都返回object;

instanceof则可以判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例并返回boolean类型:

var a={};
var b=[];

a instanceof Array //false
b instanceof Array //true

利用instanceof就可以识别数组和对象。

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

可以利用typeof运算符:

typeof 123 // "number"  /*数值返回"number"*/
typeof '123' // "string"   /*字符串返回"string"*/
typeof false // "boolean"   /*布尔值返回"boolean"*/

 /*函数返回"function"*/
 function f() {}
typeof f
// "function"
  • NaN是什么? 有什么特别之处?

JavaScript在期望使用某些类型的值时,会根据需要自行转换类型,如:当JavaScript期望使用一个布尔值的时候,你可以提供任意类型的值,JavaScript将根据需要自行转换类型,一些值(真值)转换为trun,其他值(假值)转换为false。这在其他类型中通样适用:如果JavaScript期望使用一个字符串,它会把给定的值转换为字符串。
当JavaScript期望使用一个数字,它会把给定的值转换为数字,如果转换结果无意义,则将转换为NaN:

var n= 1-'x'; // NaN  /*'x'无法转换为数字*/

NaN是一个"number",但是它不是一个确定的number,只是一个类型,所以它有一个最大的特点:

NaN === NaN // false /*NaN不等于它本身*/
  • 如何把非数值转化为数值?

可以使用下面三种方法:

Number()    /*转换为整数或浮点数*/
parseInt()    /*转换为整数*/
parseFloat()    /*转换为浮点数*/
  • ==与===有什么区别?

==和===是比较运算符。比较运算符比较两个值,然后返回一个布尔值,表示是否满足比较条件
==表示相等,不同类型的值进行比较时,会进行类型转换,类型相同后再进行值的比较;
===表示严格相等,数据类型和值都相等时才输出true,其中有一个不相等,则输出false;

false == 0 //ture    /*在普通相等下,false是等于0的,false转换后是0*/
false === 0 //false    /*在严格相等下,false是不等于0的,因为类型不相等*/
  • break与continue有什么区别?

break和continue多用在循环体中:
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在使用场景上有什么区别?

void运算符的作用是执行一个表达式,并返回undefined,区别:
1.在低版本的ie中,undefined可以被重写,影响undefined的使用,void则无此问题;

var undefined = 10;
// undefined *chrome
//10 *IE8

2.void后跟一个表达式,返回的都是 undefined,vodi 0比undefined长度小,且不会被重写。

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

console.log(1+1);   //2 
console.log("2"+"4");  //"24"
console.log(2+"4");   //"24"
console.log(+"4");  //4

加法运算符有如下规则:
1.在两个操作数都是数字的时候,会做加法运算;
2.两个参数都是字符串或在有一个参数是字符串的情况下会把另外一个参数转换为字符串做字符串拼接;
3.在参数有对象的情况下会调用其valueOf或toString;
4.在只有一个字符串参数的时候会尝试将其转换为数字;
5.在只有一个数字参数的时候返回其正数值。

  • 计算以下代码的输出结果。

var a = 1;   //声明一个变量a,a=2;
a+++a;    //++的优先级大于+,故先执行a++(a先参与运算再自增),再执行+a,得2;
typeof a+2;      //此时a完成自增,在这里a=2,typeof高于加法运算,故最后结果为"number2"
 var a = 1;  //声明变量a,a=1;
 var b = 3;  //声明变量b,b=3;
 console.log( a+++b );  //++优先级高于+,先参与运算再自增,最后结果为4;
  • 遍历数组,打印数组每一项的平方

var arr = [3,4,5];
 var arr = [3,4,5]
 for(var i = 0;i<3;i++) {
    console.log (arr[i]*arr[i])
 }
  • 遍历 JSON, 打印里面的值。

var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
var obj = {
 name: 'hunger', 
 sex: 'male', 
 age: 28 
}
for (a in obj) {
    console.log(a+":"+obj[a])
}
  • 计算输出结果。

var a = 1, b = 2, c = 3;    //声明a=1,b=2,c=3
var val = typeof a + b || c >0    //优先级:'typeof'>'+'>'>'>'||'>'='
console.log(val) // val = "number2"
//只要“||”前面为false,无论“||”后面是true还是false,结果都返回“||”后面的值。
//只要“||”前面为true,无论“||”后面是true还是false,结果都返回“||”前面的值。

 var d = 5;
var data = d ==5 && console.log('bb')
console.log(data) // data = 'bb' 
 //只要“&&”前面是false,无论“&&”后面是true还是false,结果都将返“&&”前面的值;
 //只要“&&”前面是true,无论“&&”后面是true还是false,结果都返回“&&”后面的值;

 var data2 = d = 0 || console.log('haha')
console.log(data2) // data = haha;
 
 var x = !!"Hello" + (!"world", !!"from here!!");
console.log(x)    //x = 2
 //(!"world", !!"from here!!")运算结果为true
//!!"Hello"运算结果为true
//true+true转换类型为1+1,x = 2

*注:主要是运算符的优先级问题。

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

推荐阅读更多精彩内容

  • 9.正则表达式 首先,js定义了RegExp()构造函数,用来创建表示文本匹配模式的对象。这就是正则表达式。正则表...
    我就是z阅读 652评论 0 5
  • 一、简单了解和基础知识 1.js引入方式 第一种:直接在body标签下面引入js文件或者直接在下面写js代码; 第...
    空谷悠阅读 457评论 0 2
  • js课程 js代码需放在script标签里面,可以放在head里,也可以放在body里面,还可以放在任意的标签里边...
    Nico酱阅读 217评论 0 0
  • 写于2017.07.29 js声明变量方法 var a =1表示声明一个变量。用var声明的变量都存在声明提升,意...
    田田kyle阅读 234评论 0 0
  • ——读房昊《世事如刀,我来领教》 看这类作品比较少,上次看还是朱炫的《年少荒唐》,巧的是朱炫也是知乎作者。让我开始...
    宋染青阅读 497评论 0 3