JavaScript数据判断与比较

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只是一个对象,有parsestringify两个方法,使用也非常简单

JSON.stringify({a:10, b:20})
JOSN.parse('{"a":10,"b":20}')

我之所以误答,就是怕初学者把这个问题搞大,因为 json 也是一种数据格式,这一点和 xml 一样。但是在 JS 的面试题中,如果问到这个问题,直接说明parsestringify两个方法的用法即可。

事件总线


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);
}
上一篇
下一篇