首页 > 语言 > JavaScript > 正文

「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)

2024-05-06 15:40:58
字体:
来源:转载
供稿:网友

1. 实现一个new操作符

new操作符做了这些事:

    它创建了一个全新的对象。 它会被执行[[Prototype]](也就是__proto__)链接。 它使this指向新创建的对象。。 通过new创建的每个对象将最终被[[Prototype]]链接到这个函数的prototype对象上。 如果函数没有返回对象类型Object(包含Functoin, Array, Date, RegExg, Error),那么new表达式中的函数调用将返回该对象引用。
function New(func) { var res = {}; if (func.prototype !== null) {  res.__proto__ = func.prototype; } var ret = func.apply(res, Array.prototype.slice.call(arguments, 1)); if ((typeof ret === "object" || typeof ret === "function") && ret !== null) {  return ret; } return res;}var obj = New(A, 1, 2);// equals tovar obj = new A(1, 2);

2. 实现一个JSON.stringify

JSON.stringify(value[, replacer [, space]]):

    Boolean | Number| String 类型会自动转换成对应的原始值。 undefined、任意函数以及symbol,会被忽略(出现在非数组对象的属性值中时),或者被转换成 null(出现在数组中时)。 不可枚举的属性会被忽略 如果一个对象的属性值通过某种间接的方式指回该对象本身,即循环引用,属性也会被忽略。
function jsonStringify(obj) { let type = typeof obj; if (type !== "object") {  if (/string|undefined|function/.test(type)) {   obj = '"' + obj + '"';  }  return String(obj); } else {  let json = []  let arr = Array.isArray(obj)  for (let k in obj) {   let v = obj[k];   let type = typeof v;   if (/string|undefined|function/.test(type)) {    v = '"' + v + '"';   } else if (type === "object") {    v = jsonStringify(v);   }   json.push((arr ? "" : '"' + k + '":') + String(v));  }  return (arr ? "[" : "{") + String(json) + (arr ? "]" : "}") }}jsonStringify({x : 5}) // "{"x":5}"jsonStringify([1, "false", false]) // "[1,"false",false]"jsonStringify({b: undefined}) // "{"b":"undefined"}"

3. 实现一个JSON.parse

JSON.parse(text[, reviver])

用来解析JSON字符串,构造由字符串描述的JavaScript值或对象。提供可选的reviver函数用以在返回之前对所得到的对象执行变换(操作)。

3.1 第一种:直接调用 eval

function jsonParse(opt) { return eval('(' + opt + ')');}jsonParse(jsonStringify({x : 5}))// Object { x: 5}jsonParse(jsonStringify([1, "false", false]))// [1, "false", falsr]jsonParse(jsonStringify({b: undefined}))// Object { b: "undefined"}

避免在不必要的情况下使用 eval,eval() 是一个危险的函数, 他执行的代码拥有着执行者的权利。如果你用 eval()运行的字符串代码被恶意方(不怀好意的人)操控修改,您最终可能会在您的网页/扩展程序的权限下,在用户计算机上运行恶意代码。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选