一些零碎js代码

75 阅读1分钟
//实现html语法校验功能
function fn (str){
    let arr = str.match(/([a-z]+)|((\/)[a-z]+)/g);
    let set = new Set();
    set.add('img');
    let temp = [];
    for(let i = 0;i<arr.length;i++){
        let flag = /(\/)/.test(arr[i]);
        if(!flag&&!set.has(arr[i])){
            temp.push(arr[i]);
        }else if(set.has(arr[i])){
            continue;
        }else if(flag){
            let s = temp.pop();
            let a = arr[i].match(/[a-z]+/);
            if(s !== a[0]){
                return false;
            }
        }
    }
    if(temp.length === 0){
        return true;
    }
    return false;
}

let str = '<div><p><img/></div></p>'
console.log(fn(str));

实现html语法校验功能 反向引用

function fn (str){
    let reg = /\<(\w+)\>(.*)\<\/\1\>/;
    let temp = reg.exec(str);
    if(temp !== null){
        return fn(temp[2]);
    }else{
        if(str === '<img/>'){
            return true
        }else{
            return false
        }
    }
}

let str = '<div><img/></div>';
let res = fn(str);
console.log(res);

function countStartH() {
    const countObj = {};
    helper(document.documentElement, countObj);
    return countObj;
}

function helper(node, countObj) {
    if (node === null) {
        return null;
    }
    const nodeName = node.nodeName;
    if (nodeName.toLowerCase().charAt(0) === 'h') {
        if (!countObj[nodeName]) {
            countObj[nodeName] = 1;
        } else {
            countObj[nodeName] += 1;
        }
    }

    // 当前元素有子元素
    if (node.children.length !== 0) {
        // 遍历子元素
        for (let i = 0; i < node.children.length; i++) {
            helper(node.children[i], countObj);
        }
    }
}
console.log(countStartH())

函数柯里化

function curry(fn){
    var arg = Array.prototype.slice.call(arguments,1); //3
    return function(){
        var inner = Array.prototype.slice.call(arguments);  //5
        var final = arg.concat(inner);
        return fn.apply(null,final);
    }
}
function add(num1,num2){
    return num1 + num2;
}
var curriedAdd = curry(add,3);
alert(curriedAdd(5));

实现//const a = add(1)(2)(3) console.log(a.get())//6;

function add(a){
    var sum = a;
    var fn = function(b){
        sum += b;
        return fn;
    }
    fn.get = function(){
        return sum;
    }
    return fn;
}
const a = add(1)(2)(3);
console.log(a.get());

当直接对函数使用 alert() 或 console.log() 时,函数的 toString() 方法会被调用。
打印和相加计算,会分别调用toString或valueOf函数

function s(a) {
    return a+1
}
s.toString = function() {
    return 111
}
console.log(s)
// f 111
typeof(s)
// "function"

function add(a) {
    function s(a) {
        return a+1
    }
    s.toString = function() {
        return a
    }
    return s
}
console.log(add(2)) // f 2

function add(a){
    var sum = a;
    var s = function (b) {
        sum = sum + b;
        return s
    }
    s.toString = function(){
        return sum
    }
    return s
}

console.log(add(3)(4)(5)); // 12