用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日

相关文章

  • Thinkphp将二维数组变为标签适用的一维数组方法总结

    想要将一个二维数组转化为标签适用的一维数组,可以使用以下的步骤: 步骤1:先将二维数组进行遍历,获取所有需要转换的值 $data = [ [‘id’=>1, ‘name’=>’Apple’, ‘color’=>’red’], [‘id’=>2, ‘name’=>’Banana’, ‘color’=>’yellow’], […

    PHP 2023年5月26日
    00
  • 小程序多图列表实现性能优化的方法步骤

    下面是针对小程序多图列表实现性能优化的方法步骤的完整攻略。 1. 对图片进行压缩处理 大型图片会严重影响网站的加载速度,因此可以通过压缩图片来降低文件大小,以提高网站的性能。在小程序中,可以使用imigix等工具将图片进行实时处理,以便更快地加载。 下面是一个简单的示例代码,展示了如何使用imigix对图片进行压缩处理: const imigix = req…

    PHP 2023年5月30日
    00
  • php实现mysql数据库备份类

    为了实现MySQL数据库备份,我们需要使用PHP调用MySQL提供的命令来进行备份。下面是实现MySQL数据库备份类的完整攻略: 步骤一:创建备份类 首先,我们需要创建一个名为BackupMySQL的PHP类,它将实现备份MySQL数据库的功能。以下是一个备份类示例: class BackupMySQL { private $DB_HOST = ‘local…

    PHP 2023年5月27日
    00
  • php中str_replace替换实例讲解

    PHP 中 str_replace 替换实例讲解 str_replace 是 PHP 中一个非常常用的字符串替换函数。它可以用来替换一个字符串中的指定部分,并返回新的替换后的字符串。 基本用法 函数原型:string str_replace ( mixed $search , mixed $replace , mixed $subject [, int &a…

    PHP 2023年5月26日
    00
  • php实现将数组或对象写入到文件的方法小结【三种方法】

    下面是关于“php实现将数组或对象写入到文件的方法小结【三种方法】”的完整攻略: 1. 使用serialize()和file_put_contents()函数 可以使用PHP内置的serialize()函数将数组或对象序列化成字符串,然后通过file_put_contents()函数将字符串写入到文件中。 $data = [‘name’ => ‘Joh…

    PHP 2023年5月26日
    00
  • 在PHP模板引擎smarty生成随机数的方法和math函数详解

    在PHP模板引擎Smarty中生成随机数的方法有很多种,其中常见的有如下两种: 使用Smarty内置函数rand()生成随机数 rand()函数可用于生成随机数,需要给定一个范围,该随机数将在该范围内生成。使用rand()函数生成随机数的示例如下: {* 生成10-50范围内的随机整数 *} {$randNum = rand(10, 50)} 注意:在使用S…

    PHP 2023年5月26日
    00
  • php随机输出名人名言的代码

    下面是PHP随机输出名人名言的代码攻略: 步骤1:创建数据库和数据表 首先,我们需要创建一个名人名言的数据库,可以使用phpMyAdmin或者其他的数据库管理工具来完成。在新创建的数据库中,我们创建一个名叫”quotes”的数据表,用来存储名人名言的相关信息: CREATE TABLE `quotes` ( `id` int(11) NOT NULL AUT…

    PHP 2023年5月26日
    00
  • php取整函数ceil,floo,round的用法及介绍

    PHP取整函数ceil, floor, round的用法及介绍 在开发PHP应用程序时,经常需要对数字进行取整操作,php提供了三个取整函数ceil, floor, round。这篇攻略将详细介绍这三个函数的用法和区别。 ceil函数 ceil函数可以将小数向上取整为最接近的整数。 语法 ceil(float $number): int 示例 <?ph…

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