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

yizhihongxing

这里提供一个用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实现的九九乘法口诀表简洁版

    这里是使用 PHP 语言实现九九乘法口诀表简洁版的完整攻略。 1.准备工作 在开始之前,您需要确保您已经安装了 PHP 环境。可以在终端中输入 php -v 命令来查看 PHP 是否已经安装以及版本号。 2.编写代码 在本例中,我们将使用 PHP 的嵌套 for 循环结构,来实现九九乘法口诀表。 以下是代码示例: <?php echo "&l…

    PHP 2023年5月23日
    00
  • PHP实现文件下载【实例分享】

    首先,在网站中实现文件下载是一个非常常见的功能,而PHP作为一种服务器端脚本语言,可以非常方便地实现这个功能。 以下是实现文件下载的步骤: 1.获取需要下载的文件名及其路径 在 PHP 中,可以使用 $_GET 方法接收传递过来的文件路径,使用 basename() 方法获取文件名。示例代码如下: $file = $_GET[‘file’]; $file =…

    PHP 2023年5月26日
    00
  • php对包含html标签的字符串进行截取的函数分享

    下面是讲解“php对包含html标签的字符串进行截取的函数分享”的完整攻略。 1. 函数介绍 在 PHP 中,截取字符串我们通常会用到 substr() 函数,但是这个函数对于包含 HTML 标签的字符串会去掉这些标签,因此如果需要截取保留 HTML 标签的字符串,我们可以使用 strip_tags() 函数去掉 HTML 标签,然后再进行截取。 具体的实现…

    PHP 2023年5月26日
    00
  • PHP接口类(interface)的定义、特点和应用示例

    PHP接口类的定义 接口(interface)是一类完全抽象的类,它们只定义了一组公共的方法并指定了方法的返回类型和参数类型,而没有具体的实现。 在PHP中,我们使用interface关键字来定义一个接口。如下面的示例: interface Logger { public function info(string $msg); public function…

    PHP 2023年5月26日
    00
  • PHP让数组中有相同值的组成新的数组实例

    要实现将数组中有相同值的元素组成新的数组实例,可以使用PHP的array_unique()和array_count_values()两个函数,它们的调用过程如下: // 定义数组 $nums = array(1, 2, 3, 2, 4, 4, 3, 5); // 去重 $unique_nums = array_unique($nums); // 统计元素出现…

    PHP 2023年5月26日
    00
  • php生成txt文件实例代码介绍

    下面是“php生成txt文件实例代码介绍”的完整攻略: 介绍 在Web开发过程中,经常需要对用户的操作进行记录或者生成一些配置文件等。而PHP语言提供了很方便的方式,可以通过PHP生成txt文件。下面我们就来介绍如何通过PHP代码来生成txt文件。 实现步骤 步骤1:创建文件 首先,我们要创建一个txt文件,在PHP中使用 fopen() 函数来创建文件,代…

    PHP 2023年5月30日
    00
  • php模板引擎技术简单实现

    我将为你详细讲解“PHP模板引擎技术简单实现”的完整攻略,以下是步骤: 步骤一:创建模板 首先,你需要创建一个模板,可以选择在你的项目中创建一个HTML模板文件。你可以使用HTML标记语言创建模板,但在需要输出动态内容的位置上,使用特殊标记语法,例如 {{ varName }}。 步骤二:编写PHP代码 接下来,你需要编写PHP代码来处理模板的动态内容。打开…

    PHP 2023年5月27日
    00
  • 详解PHP 7.4 中数组延展操作符语法知识点

    详解PHP 7.4 中数组延展操作符语法知识点攻略 什么是数组延展操作符 数组延展操作符 … 可以用于展开一个数组,类似于把一个数组中的所有元素直接插入到另一个数组中。 使用场景 在一个数组中插入另一个数组的元素; 合并两个或多个数组; 函数传参时将数组展开。 使用方法 合并数组 合并两个数组时,可以使用 array_merge 函数,如下: $arra…

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