国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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()運行的字符串代碼被惡意方(不懷好意的人)操控修改,您最終可能會在您的網頁/擴展程序的權限下,在用戶計算機上運行惡意代碼。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 龙岩市| 汤原县| 达孜县| 大悟县| 武安市| 翼城县| 海兴县| 东兰县| 龙海市| 吉隆县| 阿尔山市| 集贤县| 林州市| 绥江县| 伽师县| 嘉峪关市| 大连市| 芷江| 南木林县| 青河县| 石林| 唐河县| 海城市| 珠海市| 灌云县| 塘沽区| 福鼎市| 韩城市| 铁岭市| 灌云县| 克山县| 衢州市| 河南省| 汉川市| 南木林县| 横峰县| 和田市| 金寨县| 乌兰县| 乌拉特后旗| 卓资县|