用js写了一个类似php的print_r输出换行功能

这里提供一个用JS实现类似PHP的print_r输出换行的完整攻略。

Html部分

首先要创建一个页面用于测试,可以直接编写HTML页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>print_r输出换行测试用例</title>
</head>
<body>
    <script type="text/javascript" src="index.js"></script>
</body>
</html>

JS部分

接下来我们需要创建一个包含print_r输出换行功能的JS文件,这里为了方便,直接命名为index.js

Step1

我们首先需要创建一个函数:

function print_r(obj, depth) {
    //TODO
}

这个函数用于接收需要输出的对象及输出的深度,其中输出的深度为可选参数,默认值为1,即输出一层。

Step2

接着在函数中判断当前的输出深度和当前对象的类型:

function print_r(obj, depth=1) {
    // 如果输出深度超出指定范围,直接返回
    if (depth <= 0) return;
    // 根据obj的类型分类进行处理
    switch(typeof(obj)){
        case 'undefined':
            console.log('undefined');
            break;

        case 'number':
        case 'string':
        case 'boolean':
            console.log(obj);
            break;

        case 'function':
            console.log(obj.toString().replace(/\{[\s\S]*/, '{\n    [native code]\n}'));
            break;

        case 'object':
            //TODO
            break;
    }   
}

当类型为undefined时,输出字符串'undefined';

当类型为number、string、boolean时,直接输出;

当类型为function时,使用正则表达式将函数转换成字符串输出,方便调试;

当类型为object时,需要进一步处理。

Step3

我们先定义一个用于填补不同深度的缩进字符串,可以写成如下的函数形式:

function repeatString(str, n) {
    var res = '';
    for (var i = 0; i < n; i++) {
        res += str;
    }
    return res;
}

这个函数接收一个字符串和重复次数作为参数,返回一个该字符串重复n次后的新字符串。

接下来,我们在switch中为类型为object的情况添加一个处理逻辑,代码如下:

function print_r(obj, depth=1) {
    // 如果输出深度超出指定范围,直接返回
    if (depth <= 0) return;
    // 根据obj的类型分类进行处理
    switch(typeof(obj)){
        case 'undefined':
            console.log('undefined');
            break;

        case 'number':
        case 'string':
        case 'boolean':
            console.log(obj);
            break;

        case 'function':
            console.log(obj.toString().replace(/\{[\s\S]*/, '{\n    [native code]\n}'));
            break;

        case 'object':
            var str = '';
            if (obj === null) {
                str += 'null\n';
                break;
            }
            str += 'Object {\n';
            var space = repeatString('    ', depth);
            for (var item in obj) {
                str += space + '[' + item + '] => ';
                str += print_r(obj[item], depth - 1);
            }
            str += space.slice(0, space.length - 4) + '}\n';
            console.log(str);
            break;
    }   
}

当obj为null时,输出字符串'null';

当obj为object时,输出'Object {'作为头部,在每一项前添加对应的缩进,最后输出尾部'}'。

这里在for循环中嵌套一次print_r函数,实现递归调用,输出对象的详细信息。

完整代码如下:

function print_r(obj, depth=1) {
    // 如果输出深度超出指定范围,直接返回
    if (depth <= 0) return;
    // 根据obj的类型分类进行处理
    switch(typeof(obj)){
        case 'undefined':
            console.log('undefined');
            break;

        case 'number':
        case 'string':
        case 'boolean':
            console.log(obj);
            break;

        case 'function':
            console.log(obj.toString().replace(/\{[\s\S]*/, '{\n    [native code]\n}'));
            break;

        case 'object':
            var str = '';
            if (obj === null) {
                str += 'null\n';
                break;
            }
            str += 'Object {\n';
            var space = repeatString('    ', depth);
            for (var item in obj) {
                str += space + '[' + item + '] => ';
                str += print_r(obj[item], depth - 1);
            }
            str += space.slice(0, space.length - 4) + '}\n';
            console.log(str);
            break;
    }   
}

function repeatString(str, n) {
    var res = '';
    for (var i = 0; i < n; i++) {
        res += str;
    }
    return res;
}

示例说明

我们来运行一个简单的测试来观察输出效果。

示例1

var a = 1;
print_r(a);

输出结果:

1

示例2

var arr = {
    name: 'Jack',
    age: 20,
    message: {
        flag: true,
        list: [1, 2, 3, 4],
        say: function() {
            console.log('hello world');
        }
    }
};
print_r(arr);

输出结果:

Object {
    [name] => Jack
    [age] => 20
    [message] => Object {
        [flag] => true
        [list] => Array [
            1
            2
            3
            4
        ]
        [say] => function say() {
    console.log('hello world');
}
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用js写了一个类似php的print_r输出换行功能 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • php parse_str() 函数的定义和用法

    PHP parse_str() 函数的定义和用法: parse_str() 函数将 PHP 字符串解析成变量。 语法 parse_str(string $str, array $output ) 参数 参数 描述 $str 必需。规定要解析的字符串。 $output 可选。由解析得到数据所生成的变量名和它们的值组成的数组。 如果指定了 $output 参数,…

    PHP 2023年5月26日
    00
  • 基于PHP编程注意事项的小结

    基于PHP编程注意事项的小结 1. 代码规范 编写规范的代码对于保证程序的可读性、可维护性以及可扩展性至关重要。以下是一些基本PHP代码规范: 1.1 缩进和空格 在代码中使用缩进和合适的空格可以提高代码的可读性。 使用4个空格作为一级缩进,不要使用制表符; 在操作符两端和函数参数之间留一个空格; 在每个语句结尾加上分号。 1.2 命名规范 使用有意义的命名…

    PHP 2023年5月30日
    00
  • php实现RSA加密类实例

    下面是详细讲解“php实现RSA加密类实例”的完整攻略: 什么是RSA加密算法? RSA算法是一种常用的非对称加密算法,也是目前最广泛使用的公钥密码体制。RSA算法是由Ron Rivest、Adi Shamir和Leonard Adleman于1977年在麻省理工学院发明的。 RSA算法的核心技术是大整数的因数分解。它其实是一种基于大质数之间相乘十分容易,但…

    PHP 2023年5月26日
    00
  • php 根据URL下载远程图片、压缩包、pdf等文件到本地

    为实现根据URL下载远程图片、压缩包、PDF等文件到本地,需要分三个步骤完成。 步骤一:获取文件资源 这一步需要通过 PHP 提供的 CURL 扩展,发送 HTTP 请求,获取文件资源。在使用 CURL 扩展时,需要设置一些请求参数,如请求的 URL、请求方式(GET 或 POST)、请求头等。 以下是一个获取远程图片文件资源的示例: $url = ‘htt…

    PHP 2023年5月26日
    00
  • php一维二维数组键排序方法实例总结

    标题:PHP一维二维数组键排序方法实例总结 一、前言 在PHP中,数组是一种重要的数据类型。在实际开发中,我们往往需要对数组进行排序的操作。而数组排序操作的常见方式为按键排序。本文将详细讲解PHP中按一维、二维数组键排序的方法,以及一些实例总结。 二、按一维数组键排序 1. sort sort()是PHP中最简单的一维数组排序函数。它可以按照键名对数组进行升…

    PHP 2023年5月26日
    00
  • 常用照片尺寸有哪几个? 照片标准尺寸/像素对照表汇总

    在设计和处理照片时,了解常用的照片尺寸和像素大小是非常重要的。以下是常用照片尺寸和像素大小的汇总说明: 照片标准尺寸/像素对照表汇总 1. 网络图片 头像:一般为方形,在 200200 像素到500500 像素之间。 banner:网站首页的大图,通常是横幅广告。可以根据网站设计自由调整大小,多为 1920*1080 像素或更大。 2. 社交媒体 FaceB…

    PHP 2023年5月27日
    00
  • PHP实现Socket服务器的代码

    下面是PHP实现Socket服务器代码的完整攻略: 知识储备 在阅读本攻略之前,您需要掌握以下几个知识点: Socket编程相关知识; PHP编程基础; Linux命令行基础。 实现过程 1. 创建Socket连接 PHP可以通过socket_create()函数创建Socket连接。在创建时需要指定Socket类型、传输协议、地址族等参数,常见的参数组合包…

    PHP 2023年5月23日
    00
  • php urlencode()与urldecode()函数字符编码原理详解

    PHP urlencode()与urldecode()函数字符编码原理详解 简介 在使用PHP进行Web开发时,处理URL编码通常是必要的。PHP内置的urlencoce()和urldecode()函数提供了处理URL编码的便利方法。本文将详细介绍urlencode()和urldecode()函数的原理和使用方法。 urlencode() urlencode…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部