详解Node.js中path模块的resolve()和join()方法的区别


Posted in Javascript onOctober 29, 2018

关于Node.js中path模块的resolve()和join()方法的比较,对照着总结看例子差不多以后在写模块的时候思路就能很清晰了

resolve

作用:path.resolve() 该方法将一些的 路径/路径段 解析为绝对路径。

语法:path.resolve([...paths])

说明:

  • ...paths <string> 一个路径或路径片段的序列
  • 如果没有传入 path 片段,或者path 片段长度为零(空字符),则 path.resolve() 会返回当前工作目录的绝对路径(相当于使用path.resolve(__dirname))

例子:我当前的工作路径为/workspace/demo

console.log(path.resolve())      // returns /workspace/demo
console.log(path.resolve(''))     // returns /workspace/demo
console.log(path.resolve(__dirname)) // returns /workspace/demo
console.log(path.resolve('/img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', '/net'))  // returns '/net'
console.log(path.resolve('img/books', './net'))  // returns '/workspace/demo/img/books/net'
console.log(path.resolve('/img/books', './net'))  // returns '/img/books/net'
console.log(path.resolve('/img/books', 'net'))   // returns '/img/books/net'
console.log(path.resolve('/img/books', '../net'))     // returns '/img/net'
console.log(path.resolve('src','/img/books', '../net'))  // returns '/img/net'
console.log(path.resolve('src','./img/books', '../net'))  // returns '/workspace/demo/src/img/net'
console.log(path.resolve('src','img/books', '../net'))   // returns '/workspace/demo/src/img/net'

总结一下:从后向前,若字符以 / 开头,不会拼接到前面的路径;若以 ../ 开头,拼接前面的路径,但是不含前面一节的最后一层路径;若以 ./ 开头 或者没有符号 则拼接前面路径;

join

作用:path.join()方法使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径。

语法:path.resolve([...paths])

说明:

  • ...paths <string> 一个路径或路径片段的序列
  • 长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 '.',表示当前工作目录

例子:

path.join('/img', 'book', 'net/abc', 'inter', '..'); // returns /img/book/net/abc
console.log(path.join('/img/books', '../net'))  // returns /img/net
console.log(path.join('img/books', '../net'))   // returns img/net
console.log(path.join('/img/books', './net'))   // returns /img/books/net
console.log(path.join('img/books', './net'))   // returns img/books/net
console.log(path.join('/img/books', 'net'))    // returns /img/books/net
console.log(path.join('img/books', 'net'))    // returns /img/books/net
console.log(path.join('/img/books', '/net'))   // returns /img/books/net
console.log(path.join('img/books', '/net'))    // returns img/books/net

总结一下 区别:join()只是拼接各个path片段,并不像resolve()一样除了拼接各个字段还拼接了工作目录的路径,其次如果以/开头的字符串片段在join并不像resolve一样是只返回自身,还有就是.. 同 ../是一个意思都代表上一级目录

两者区别:

1、join是把各个path片段连接在一起, resolve把‘/'当成根目录

path.join('/a', '/b') // Outputs '/a/b'
path.resolve('/a', '/b') // Outputs '/b'

2、join直接拼接字段,resolve解析路径并返回

path.join("a", "b1", "..", "b2")

console打印会得到"a/b2"

path.resolve("a", "b1", "..", "b2")

console打印得到"/home/myself/node/a/b2"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
一段非常简单的让图片自动切换js代码
Nov 10 Javascript
关于event.cancelBubble和event.stopPropagation()的区别介绍
Dec 11 Javascript
JavaScript程序员应该知道的45个实用技巧
Mar 04 Javascript
Javascript图片上传前的本地预览实例
Jun 16 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
js绘制购物车抛物线动画
Nov 18 Javascript
轻松理解JavaScript闭包
Mar 14 Javascript
vue 设置路由的登录权限的方法
Jul 03 Javascript
javascript实现考勤日历功能
Nov 29 Javascript
layui 弹出层回调获取弹出层数据的例子
Sep 02 Javascript
使用Vue实现一个树组件的示例
Nov 06 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 Javascript
详解vue-router数据加载与缓存使用总结
Oct 29 #Javascript
vue mounted 调用两次的完美解决办法
Oct 29 #Javascript
Electron中实现大文件上传和断点续传功能
Oct 28 #Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 #Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
Oct 28 #Javascript
深入浅析javascript函数中with
Oct 28 #Javascript
微信小程序动画(Animation)的实现及执行步骤
Oct 28 #Javascript
You might like
php 运行效率总结(提示程序速度)
2009/11/26 PHP
探讨如何使用SimpleXML函数来加载和解析XML文档
2013/06/07 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jQuery代码优化 选择符篇
2011/11/01 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
jquery定时滑出可最小化的底部提示层特效代码
2013/10/02 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
javascript中数组的冒泡排序使用示例
2013/12/18 Javascript
jquery获取radio值实例
2014/10/16 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
2015/02/26 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
JS搜狐面试题分析
2016/12/16 Javascript
新闻上下滚动jquery 超简洁(必看篇)
2017/01/21 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
JavaScript实现写入文件到本地的方法【基于FileSaver.js插件】
2018/03/15 Javascript
Node.Js中实现端口重用原理详解
2018/05/03 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
js实现动态添加上传文件页面
2018/10/22 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
疯狂上涨的Python 开发者应从2.x还是3.x着手?
2017/11/16 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
2019/01/15 Python
python3.8与pyinstaller冲突问题的快速解决方法
2020/01/16 Python
python实现堆排序的实例讲解
2020/02/21 Python
Python xmltodict模块安装及代码实例
2020/10/05 Python
2015年体育教师个人工作总结
2015/05/12 职场文书
行政处罚事先告知书
2015/07/01 职场文书
公务员学习中国梦心得体会
2016/01/05 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android