不用引入外部库,在浏览器上一行计算出SHA-1/SHA-256的结果

chrome、safari、firefox等浏览器里计算字符串 “abc”的Sha-1结果,写法是这样:

await crypto.subtle.digest('SHA-1',new TextEncoder().encode("abc")).then(a=>Array.from(new Uint8Array(a)).map(a=>a.toString(16).padStart(2,'0')).join(""))

正确运行的前提是脚本运行在https网站上,或者运行在本地。

结果是 a9993e364706816aba3e25717850c26c9cd0d89d

验证可以在这里做

 sha加密-在线工具sha加密工具提供了几种在程序中常用的安全散列算法帮助我们在线对字符串进行sha加密.https://www.qtool.net/sha

根据这里的说明,支持4种SHA算法

  • SHA-1 
  • SHA-256
  • SHA-384
  • SHA-512.

SubtleCrypto.digest() - Web APIs | MDNThe digest() method of the SubtleCrypto interface generates a digest of the given data. A digest is a short fixed-length value derived from some variable-length input. Cryptographic digests should exhibit collision-resistance, meaning that it's hard to come up with two different inputs that have the same digest value.https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest

<think>好的,用户想了解JavaScript的内部、外部和行内使用方式。首先,我需要回忆一下这三种方式的基本概念和区别。 内部JavaScript通常指的是在HTML文件中直接使用<script>标签嵌入代码,可以分为头部和尾部两种情况。用户可能需要知道放置位置对页面加载的影响,比如放在body底部可以避免阻塞DOM渲染。 然后是外部JavaScript,通过<script>标签的src属性引入外部.js文件。这时候要强调优点,比如可维护性、缓存优势以及代码复用。同时,可能需要提到使用async和defer属性来控制脚本加载和执行时机。 行内JavaScript指的是直接在HTML元素的事件属性中写代码,比如onclick或者onmouseover。这部分需要指虽然方便,但存在可维护性和分离原则的问题,不推荐大量使用。 接下来要考虑用户可能的实际应用场景。如果是初学者,可能需要简单直接的例子,但也要提醒最佳实践,比如避免行内脚本,优先使用外部文件。此外,用户可能没有提到模块化或者现代框架中的用法,但暂时按问题范围回答即可。 需要检查是否有遗漏点,比如type属性在HTML5中默认为text/javascript,所以可以省略。同时,外部脚本的路径可以是相对或绝对URL,可能需要简单说明。 还要注意安全问题,比如行内脚本可能导致XSS漏洞,但用户的问题可能不涉及安全方面,所以暂时可以不深入,除非有必要提及。 最后,整理结构,分点说明每种方式的写法、优缺点,以及适用场景,确保回答清晰易懂,符合用户的需求。</think>JavaScript的三种引入方式可分为以下三种类型: 一、内部JavaScript(嵌入式) ▶ 写法 <details> <summary>代码示例(点击展开)</summary> ```html <!DOCTYPE html> <html> <head> <!-- 头部嵌入(不推荐) --> <script> function headScript() { console.log('Head中的脚本'); } </script> </head> <body> <!-- 推荐在body结束前嵌入 --> <script> console.log('页面加载完成'); document.getElementById('btn').onclick = function() { alert('按钮被点击'); }; </script> </body> </html> ``` </details> ◉ 特点: - 直接写在HTML文档中 - 可放置在<head>或<body>中 - 执行顺序影响页面加载速度(头部脚本会阻塞渲染) 二、外部JavaScript ▶ 标准写法 ```html <script src="app.js" defer></script> ``` ◉ 核心优势: 1. 代码复用性:多个页面共享同一脚本 2. 维护便捷:修改只需更新单个文件 3. 缓存优势:浏览器会缓存外部脚本 4. 并行加载:配合async/defer实现非阻塞加载 ▶ 加载方式对比表: | 属性 | 执行时机 | 加载是否阻塞 | |---------|-------------------------|-------------| | 无属性 | 立即执行,暂停HTML解析 | 是 | | async | 加载完成后立即执行 | 否 | | defer | HTML解析完成后执行 | 否 | 三、行内JavaScript(事件处理程序) ▶ 典型应用: ```html <button onclick="alert('立即执行')">点击我</button> <div onmouseover="this.style.backgroundColor='yellow'">悬停变色</div> ``` ◉ 注意事项: - 仅适用于简单逻辑(不超过1-2行代码) - 违反关注点分离原则(混合HTML与JS) - 存在XSS攻击风险 - 不利于代码维护 四、现代最佳实践推荐 1. 优先使用外部脚本(占比80%+) 2. 简单页面可使用body底部的内部脚本 3. 完全避免使用行内事件处理(React/Vue等框架已通过虚拟DOM机制优化事件绑定) 4. 模块化开发推荐方案: ```html <script type="module" src="main.js"></script> ``` 五、调试技巧 1. 浏览器开发者工具 → Sources面板查看脚本加载情况 2. 使用`//# sourceURL=dynamicScript.js`给动态脚本命名 3. Network面板检查外部脚本加载状态(200/304响应) 建议开发中始终遵循: 1. 严格模式声明:脚本开头添加`'use strict';` 2. 外部脚本启用子资源完整性校验: ```html <script src="app.js" integrity="sha384-示例哈希值" crossorigin="anonymous"></script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值