第一家H姓公司
先做了一套面试题,题目看似比较基础但又不失刁钻,比叫考验基本功,做了题才发现自己是问啥啥不会,就连基本的number和string的运算原则都忘记了,内心真的感觉很丢人。
上题目:
1. 输出表达式:-1+-1+"2"+"2"
+1-+"2"+"2"
的结果
这道题考的是基本数据类型number和string的运算原则,数字字符串与number数字做加操作结果都是字符串类型,与自己或number数字做减操作结果都是number类型。
2. JavaScript中的类型转换是怎样的?
要知道JavaScript中的数据类型之间是怎么转换的,就先来复习一下JavaScript中的数据类型。
JavaScript中的数据类型
在JavaScript中有五种数据类型:
- string
- number
- boolean
- object
- function
还有三种对象类型:
- Object
- Date
- Array
两个不包含任何值的数据类:
- null
- undefined
typeof 操作符
使用typeof操作符可以来查看变量的数据类型。
1 | typeof null // object |
注意:
- NaN 的数据类型是number
- 数组(Array)的数据类型是object
- 日期的数据类型是object
- null 的数据类型是object
- 未定义的变量的数据类型是undefined
所以仅仅用typeof来进行变量类型的判断是远远不够的。
constructor 属性
constructor属性返回所有JavaScript变量的构造函数。
1 | 'gg'.constructor // ƒ String() { [native code] } |
是不是发现了新大陆,所有类型感觉都可以一网打尽了,绝不错杀一个,嘿嘿嘿!1
2
3
4
5
6
7
8
9let arr = [0, 1, 2, 3, 4, 5];
if (arr.constructor.toString().indexOf('Array') > -1) {
// 是数组错不了了
}
let date = new Date();
if (date.constructor.toString().indexOf('Array') > -1) {
// 是Date没跑了
}
JavaScript 类型转换
JavaScript变量可以转换为新变量或者其它数据类型:
- 通过使用JavaScript函数
- 通过JavaScript自身自动转换
数字转换为字符串
全局方法String可以将数字、布尔值、日期、转换为字符串。1
2
3
4String(123); // 将数字123转换为123的字符
String(123 + 100); // 将表达式的结果转换为字符串
String(true); // 将true转换为字符串的'true'
String(new Date()); // 返回"Thu Nov 01 2018 23:11:05 GMT+0800 (中国标准时间)"
将字符串转换为数字
全局方法Number() 可以将字符串转换为数字1
2
3Number('666'); // 返回 666
Number('z'); // 返回 NaN
Number('66.66'); // 返回 66.66
方法 | 描述 |
---|---|
paseFloat() | 解析一个字符串,并返回一个浮点数 |
paseInit | 解析一个字符串,返回一个整数 |
自动转换类型
1 | 3 + '1' // 返回 '31' 3由number自动转换为'3'string |
一元运算符 + 在与字符串运算时会把number转换为string
-、*、/ 字符串与数字运算时会将string转换为number再进行运算
3. Javascript作用域是怎样的?
在JavaScript中每个函数内部的一系列变量和访问变量的规则统称为作用域。多作用域可以嵌套,外部作用域访问不了内部作用域的变量,只能从内部访问外部作用域的变量。而且同一个作用域中变量名必须唯一。
4. 解释JavaScript中的相等判断
判断两个变量是否相等时,有两种比较符号:
- 全等于 (===): 判断变量的值和他的类型
- 等于 (==): 只判断变量的值
1 | 0 == false // true |
5. 回调函数是什么?
简单来说,就是把一个函数当做参数传入正在调用的函数中,并在当前函数体内执行传入的参数函数。这个过程在JavaScript中也叫作闭包,因为传入的回调函数内部可以访问到当前函数内部的作用域,而且在回调函数未执行之前一直会占用内存,直到回调函数执行后才会销毁这部分内存。
1 | function myCallback(data) { |
6. “use strict” 的作用
“use strict” 是放在js文件第一行来进行声明当前js的执行环境使用严格模式,在严格模式下,必须按照严格模式个要求编写js代码,否则运行时就会抛出错误。
1 | // 比如在严格模式下必须使用变量声明符来声明变量 |
7. null 和undefined 的区别
null表示一个空的对象指针,undefined则表示变量未定义初始值