JS中使用typeof
能得到的哪些类型
针对这个题目,可以通过以下程序进行验证
typeof undefined // "undefined"
typeof 'abc' // "string"
typeof 123 // "number"
typeof true // "boolean"
typeof {} // "object"
typeof [] // "object"
typeof null // "object"
typeof console.log // "function"
何时使用===
何时使用==
首先你得明白两者的区别。==
会先试图类型转换,然后再比较,而===
不会类型转换,直接比较。如下例子:
1 == '1' // true
1 === '1' // false
0 == false // true
0 === false // false
null == undefined // true
null === undefined // false
根据 jQuery 源码中的写法,只推荐在一个地方用==
,其他地方都必须用===
。这个用==
的地方就是:
if (obj.a == null) { // 这里相当于 obj.a === null || obj.a === undefined ,简写形式
}
编程是需要绝对严谨的态度,我们只在这一个地方让它进行类型转换,来简化我们的写法,因为这个场景非常简单和固定。而其他场景下,我们都必须使用===
,除非有特殊的业务需要。
JS中有哪些内置函数 —— 数据封装类对象
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
对于这种问题,回复时能把基本常用的回答上来就可以,没必要背书把所有的都写上。
JS变量按照存储方式区分为哪些类型,并描述其特点
- 值类型
undefined
string
number
boolean
- 引用类型
object
function
最后补充一点,在 JS 中,所有的引用类型都可以自由设置属性
var obj = {}
obj.a = 100
var arr = []
arr.a = 100
function fn() {}
fn.a = 100
如何理解JSON
从 JS 角度回答,太简单了,console.log(JSON)
得到JSON
只是一个对象,有parse
和stringify
两个方法,使用也非常简单
JSON.stringify({a:10, b:20})
JOSN.parse('{"a":10,"b":20}')
我之所以误答,就是怕初学者把这个问题搞大,因为 json 也是一种数据格式,这一点和 xml 一样。但是在 JS 的面试题中,如果问到这个问题,直接说明parse
和stringify
两个方法的用法即可。
事件总线
App({
onLaunch: function () {
// 创建事件总线
this.eventBus = {
events: {},
subscribe: function(eventName, callback) {
if (!this.events[eventName]) {
this.events[eventName] = [];
}
this.events[eventName].push(callback);
},
publish: function(eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(function(callback) {
callback(data);
});
}
},
unsubscribe: function(eventName, callback) {
if (this.events[eventName]) {
this.events[eventName] = this.events[eventName].filter(function(cb) {
return cb !== callback;
});
}
},
}
},
// ...
})
// index.js
const app = getApp();
Page({
onLoad: function () {
// 订阅事件
app.eventBus.subscribe('event1', this.handleEvent1);
},
handleEvent1: function(data) {
console.log('Event 1 occurred with data:', data);
},
// ...
})
// app.js
// ...
// 在某个地方抛出事件
this.eventBus.publish('event1', 'Hello, Event 1!');
// ...
// 安装依赖 npm i babel-plugin-transform-react-createelement-to-jsx
import babel from '@babel/core'
import fs from 'fs';
// https://www.bejson.com/convert/unicode_chinese/
function ToGB2312(str) {
return unescape(str.replace(/\\u/gi, '%u'));
}
// unicode字符转为中文字符
const chineseStr = ToGB2312("\u6587\u672C\u4F4D\u7F6E:")
console.log("chineseStr:\n", chineseStr)
let inputCode;
try {
inputCode = fs.readFileSync('Input.jsx', 'utf8');
// console.log(inputCode);
} catch (err) {
console.error(err);
}
const result = babel.transform(inputCode, {
plugins: ['transform-react-createelement-to-jsx'],
})
const codeStr = result.code;
console.log('codeStr==> ', codeStr);
try {
fs.writeFileSync('Output.jsx', codeStr);
} catch (err) {
console.error(err);
}