<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Serenepine</title>
    <description>The latest articles on Forem by Serenepine (@serenepine).</description>
    <link>https://forem.com/serenepine</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1107902%2Fc9eee4a7-45f9-4156-ba24-b903c3b06a36.jpg</url>
      <title>Forem: Serenepine</title>
      <link>https://forem.com/serenepine</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/serenepine"/>
    <language>en</language>
    <item>
      <title>Recommendations for Useful AI Search Tools</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Thu, 06 Nov 2025 06:09:35 +0000</pubDate>
      <link>https://forem.com/serenepine/recommendations-for-useful-ai-search-tools-1ceg</link>
      <guid>https://forem.com/serenepine/recommendations-for-useful-ai-search-tools-1ceg</guid>
      <description>&lt;p&gt;The core value of AI search tools is that they are fundamentally changing how we interact with information. Traditional search engines provide an "index," requiring users to click links, read, filter, and synthesize answers for themselves. AI search, however, attempts to bypass these intermediate steps by directly understanding complex user intent, integrating web information, and generating a relatively complete, ready-to-use "answer."&lt;/p&gt;

&lt;p&gt;This "answer-driven" experience is iterating rapidly, and many excellent products with different approaches have emerged. Each has its own focus and is suited for different needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kc7158wwcidsqta00en.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8kc7158wwcidsqta00en.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Perplexity AI: The Rigorous Answer Engine&lt;/p&gt;

&lt;p&gt;Perplexity AI is perhaps the product that best represents the "answer engine" model today. Its interface is extremely minimalist, centered entirely around the question-and-answer workflow. Perplexity's real strength lies in its rigorous handling of sources. In its generated answers, it clearly cites every piece of information with superscript numbers linking directly to the source URL.&lt;/p&gt;

&lt;p&gt;This feature makes it ideal for scenarios requiring fact-checking and source verification, such as writing reports, academic research, or in-depth reading. Furthermore, Perplexity offers a "Focus" feature, allowing users to narrow the search scope to specific domains like "Academic," "Writing," or "YouTube" to get more precise, vertical answers.&lt;/p&gt;

&lt;p&gt;Microsoft Copilot: The Deeply Integrated All-in-One Assistant&lt;/p&gt;

&lt;p&gt;Microsoft's Copilot (formerly Bing Chat) is the prime example of a tech giant deeply integrating AI with &lt;a href="https://promptchoose.edu520.com/ai-tools/zh-telegram-search/" rel="noopener noreferrer"&gt;search&lt;/a&gt;. Backed by the Microsoft ecosystem, it combines advanced GPT models (like GPT-4) with Bing's real-time search capabilities. Copilot's advantage lies not just in its "timeliness" but in its deep "ecosystem integration."&lt;/p&gt;

&lt;p&gt;It is seamlessly built into the Edge sidebar, the Windows operating system, and standalone apps, making it nearly ubiquitous. Copilot is more than just a search engine; it functions more like an "all-in-one" comprehensive assistant. Beyond text-based Q&amp;amp;A, it can handle complex image analysis ("What does this chart mean?") and high-quality image generation (based on DALL-E 3), making it a partner that can assist with both creative and executive tasks.&lt;/p&gt;

&lt;p&gt;Google Search's AI Overviews&lt;/p&gt;

&lt;p&gt;As the giant in traditional &lt;a href="https://promptchoose.edu520.com/ai-tools/telegram-search/" rel="noopener noreferrer"&gt;search&lt;/a&gt;, Google hasn't launched a standalone "AI search" product. Instead, it has chosen to fully integrate its AI capabilities into the existing search experience. This is what users now frequently see at the top of the results page: "AI Overviews."&lt;/p&gt;

&lt;p&gt;This represents an "enhancement" rather than a "revolutionary" strategy. AI Overviews attempt to provide a highly summarized answer before the user even skims the list of blue links, which is especially useful for how-to guides or factual queries. This approach preserves the user's habit of clicking links while adding an AI-generated answer as a supplement, striking a balance to improve efficiency without drastically changing user habits.&lt;/p&gt;

&lt;p&gt;Phind: The Professional Choice for Developers&lt;/p&gt;

&lt;p&gt;Phind is an &lt;a href="https://promptchoose.edu520.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; search engine that has deeply specialized in a vertical field: programming. It is specifically optimized for the needs of developers and technical professionals, and its performance on coding questions far exceeds that of general-purpose AI search tools.&lt;/p&gt;

&lt;p&gt;When a user searches for a technical problem, debugs a bug, or queries API usage for a specific library, Phind not only provides an accurate explanation but also generates high-quality, usable code snippets. It understands technical context and can synthesize solutions by combining the latest technical documentation, Stack Overflow discussions, and GitHub repositories. For programmers, it acts like an experienced "pair programming" partner, greatly increasing problem-solving efficiency.&lt;/p&gt;

&lt;p&gt;Arc Search: Innovating the Mobile Search Experience&lt;/p&gt;

&lt;p&gt;Arc Search, from The Browser Company, is a mobile (currently iOS-focused) search app that offers a bold innovation in user experience. Its core feature is "Browse for me."&lt;/p&gt;

&lt;p&gt;When a user types a query, Arc Search doesn't just show a list of results. Instead, it "browses" and reads multiple relevant web pages for the user, then digests, summarizes, and organizes all the information. Finally, it generates a custom, richly formatted "webpage" built just for that query. This process is like having a personal assistant do all the initial research for you. This experience is particularly well-suited for mobile, as it completely solves the pain point of constantly switching between tabs on a small screen to compare information.&lt;/p&gt;

&lt;p&gt;Consensus: The Evidence-Based Tool for Academic Research&lt;/p&gt;

&lt;p&gt;Consensus is another vertically-focused AI search tool, aimed primarily at academic researchers, students, journalists, and anyone who needs "scientific evidence." Unlike Phind's focus on coding, the Consensus database is composed entirely of scientific papers and academic literature.&lt;/p&gt;

&lt;p&gt;Its specialty is its ability to accurately extract "research conclusions" from a vast library of papers in response to a direct question. For example, you can ask, "Is [a specific diet] effective for health?" and Consensus will search relevant papers and summarize the scientific community's findings and mainstream conclusions. It helps users cut through the noise of commercial marketing and personal blogs to get straight to evidence-based answers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54keymuw3jcqvjairhc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54keymuw3jcqvjairhc4.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You.com: The Highly Customizable Search Portal&lt;/p&gt;

&lt;p&gt;You.com was one of the earlier explorers in the &lt;a href="https://edu520.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; search space, and its key characteristic is its high degree of customization. It allows users to switch between different AI modes, such as a fact-oriented "Smart" mode or a creative-oriented "Genius" mode.&lt;/p&gt;

&lt;p&gt;However, its core differentiator is the integration of "Apps." The You.com results page is not a traditional vertical list but rather a card-based horizontal layout. These cards can pull information from user-specified sources, such as Reddit, Stack Overflow, shopping sites, or specific news outlets. Users can prioritize these "Apps," allowing them to build a highly personalized information portal.&lt;/p&gt;

&lt;p&gt;Komo Search: Focusing on Community and Real Discussions&lt;/p&gt;

&lt;p&gt;Komo Search is a relatively new AI search engine that emphasizes privacy and a "de-SEO-ed" approach. One of Komo's notable features is that it heavily values authentic user discussions from forums and social media (especially Reddit).&lt;/p&gt;

&lt;p&gt;In traditional search engines, the top results are often heavily search-engine-optimized (SEO) commercial content or marketing articles. Komo attempts to bypass this content to unearth the genuine experiences and opinions of ordinary users. When a user wants to find firsthand reviews of a product or real discussions about a niche hobby, Komo can often provide more authentic, "down-to-earth" results than traditional search.&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;The development of AI search tools is in a highly active phase and is showing a clear trend of "divergence." We no longer have just one "one-size-fits-all" search engine.&lt;/p&gt;

&lt;p&gt;Whether it's answer engines like Perplexity that pursue factual rigor, all-in-one assistants like Copilot that are deeply integrated into operating systems, or specialized tools like Phind and Consensus that are masters of specific domains, they are all developing toward the goal of being "faster, more accurate, and more direct." Which one to choose depends more on the user's specific needs in a given situation.&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Writing English README, Issue, and PR: Make Open Source Collaboration Smoother</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Tue, 23 Sep 2025 06:24:34 +0000</pubDate>
      <link>https://forem.com/serenepine/writing-english-readme-issue-and-pr-make-open-source-collaboration-smoother-ige</link>
      <guid>https://forem.com/serenepine/writing-english-readme-issue-and-pr-make-open-source-collaboration-smoother-ige</guid>
      <description>&lt;p&gt;Many developers face the same challenge when contributing to GitHub for the first time: the code works perfectly, but when writing a README, submitting an Issue, or creating a PR in &lt;a href="https://edu520.com/" rel="noopener noreferrer"&gt;English&lt;/a&gt;, it never feels quite right. You worry that others might not understand what you mean.&lt;/p&gt;

&lt;p&gt;This concern is completely normal. Technical English is different from everyday English—it has its own conventions and common phrases. The good news is that once you grasp a few basic patterns, writing these documents is much easier than you might think.&lt;/p&gt;




&lt;h2&gt;
  
  
  README: Help Others Quickly Understand Your Project
&lt;/h2&gt;

&lt;p&gt;A README is the first window through which others see your project. A clear README usually organizes information in the following order: explain what the project does, show how to use it, and provide any additional helpful information.&lt;/p&gt;

&lt;p&gt;The project description should be straightforward. For example, "This project helps you manage your daily tasks more efficiently" is better than "This is an awesome task management tool." The former clearly explains the purpose, while the latter is just self-praise.&lt;/p&gt;

&lt;p&gt;Next, installation and usage instructions are crucial. Write them from the perspective of someone who knows nothing about your project. Each step should be clear and precise—don’t skip any seemingly “obvious” steps. For example, when installing dependencies, you could write, "Install dependencies by running &lt;code&gt;npm install&lt;/code&gt;," rather than just "Install dependencies."&lt;/p&gt;

&lt;p&gt;Code examples are equally important. A good example should be complete and runnable, without requiring the reader to guess missing parts. For instance, when demonstrating an API call, include import statements, initialization, and the actual call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Issue: Describe Problems and Requests Accurately
&lt;/h2&gt;

&lt;p&gt;When writing an Issue, the most important thing is to let maintainers quickly understand the problem or feature request. A common mistake is being too brief, e.g., just writing, "It doesn't work." Such descriptions are not helpful.&lt;/p&gt;

&lt;p&gt;When reporting a bug, organize information in a "symptom–expected behavior–environment" order. First, describe the issue you observed, then state what you expected, and finally provide your environment details. For example:&lt;br&gt;
&lt;em&gt;"When I click the submit button, the page shows a 500 error. I expected the form to be submitted successfully. I'm using Chrome 91 on macOS 12.1."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If possible, provide a minimal reproducible example. This helps maintainers quickly locate the issue and shows that you’ve spent time investigating it.&lt;/p&gt;

&lt;p&gt;When requesting a new feature, explain why you need it rather than just stating what you want. For example:&lt;br&gt;
&lt;em&gt;"I often need to batch delete multiple items, but currently I have to delete them one by one, which is time-consuming"&lt;/em&gt;&lt;br&gt;
is much better than&lt;br&gt;
&lt;em&gt;"Please add batch delete feature."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  PR: Clearly Explain Your Changes
&lt;/h2&gt;

&lt;p&gt;A Pull Request is the formal way to contribute code, so your description needs extra care. A good PR description should make reviewers understand three things: what you changed, why you changed it, and whether the change is safe.&lt;/p&gt;

&lt;p&gt;The title should be concise yet informative. "Fix user login bug" is better than "Bug fix," and "Add email validation to user registration" is better than "Update user.js." The title should clearly convey the main purpose of the PR.&lt;/p&gt;

&lt;p&gt;In the body, start with context. What problem prompted this change? If fixing a bug, briefly describe its behavior; if adding a feature, explain the use case. Then detail your solution, and if you considered multiple approaches, mention why you chose the current one.&lt;/p&gt;

&lt;p&gt;Testing information is also important. Explain how you verified your changes. For example:&lt;br&gt;
&lt;em&gt;"I tested this change by creating a new user with an invalid email address and confirmed that the validation error is properly displayed."&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Make Your English More Natural
&lt;/h2&gt;

&lt;p&gt;There are a few tips to make your English writing more fluent.&lt;/p&gt;

&lt;p&gt;First, pay attention to tense. Use the present tense for current behavior, e.g., "This function returns the user's email"; past tense for changes you made, e.g., "I added validation for the email field"; and future tense or modal verbs for expected effects, e.g., "This change will prevent invalid emails" or "Users should no longer see the error message."&lt;/p&gt;

&lt;p&gt;Second, mind the tone. In open-source environments like GitHub, polite but direct is best. You don’t need to be overly apologetic (e.g., "I'm sorry to bother you, but..."), but also avoid sounding too harsh. "Could you help me understand why..." is better than "I don't understand why..."&lt;/p&gt;

&lt;p&gt;Finally, use common phrases. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To describe a problem: "I'm experiencing an issue where..."&lt;/li&gt;
&lt;li&gt;To ask for help: "I would appreciate any guidance on..."&lt;/li&gt;
&lt;li&gt;To explain changes: "This PR addresses the issue by..."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using these phrases repeatedly will make them habitual. Eventually, you’ll naturally write clear, precise technical documents. Remember, perfect &lt;a href="https://edu520.com/" rel="noopener noreferrer"&gt;English&lt;/a&gt; isn’t the goal—the key is making your ideas understandable to others.&lt;/p&gt;

</description>
      <category>github</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Local Mock Service</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Tue, 25 Feb 2025 10:44:40 +0000</pubDate>
      <link>https://forem.com/serenepine/local-mock-service-56bi</link>
      <guid>https://forem.com/serenepine/local-mock-service-56bi</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/auden" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1410047%2Fe5c7109b-1424-4025-8170-7b59ad08f6f3.png" alt="auden"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/auden/how-to-set-up-a-local-mock-service-in-3-minutes-a-step-by-step-guide-4p6i" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How to Set Up a Local Mock Service in 3 Minutes: A Step-by-Step Guide&lt;/h2&gt;
      &lt;h3&gt;Auden ・ Feb 25&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#programming&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#developer&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#api&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>programming</category>
      <category>tutorial</category>
      <category>developer</category>
      <category>api</category>
    </item>
    <item>
      <title>7 Popular AI Video Generation Tools</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Sun, 20 Oct 2024 08:18:42 +0000</pubDate>
      <link>https://forem.com/serenepine/7-popular-ai-video-generation-tools-3m3k</link>
      <guid>https://forem.com/serenepine/7-popular-ai-video-generation-tools-3m3k</guid>
      <description>&lt;p&gt;The pace of development in AI video generation has been nothing short of astounding, leaving many of us in awe!&lt;/p&gt;

&lt;p&gt;Just recently, OpenAI's Sora stunned the tech world. The speed at which &lt;a href="https://promptchoose.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video generation technology is evolving and its wide-ranging applications are truly remarkable. From content creation to filmmaking, from education and training to marketing, AI video tools are quietly transforming the way we live and work.&lt;/p&gt;

&lt;p&gt;Today, I'll introduce you to 7 of the most popular and effective AI video generation tools currently available. Whether you're looking to create a short video or produce a professional-grade promotional film, these tools will be invaluable. So, let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Runway
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is Runway?&lt;/strong&gt; Simply put, it's a next-generation content creation tool that combines &lt;a href="https://promptchoose.com/ai-tools/ai-agent-tools-and-platforms/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; technology with video production. Its strength lies in its versatility: it can generate videos, edit them, and even add special effects.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt; of Runway:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Text-to-Video:&lt;/strong&gt; Input a text description, and it will create a corresponding video for you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Image-to-Video:&lt;/strong&gt; Transform static images into dynamic videos, a truly magical feature!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Video Editing:&lt;/strong&gt; Offers a comprehensive suite of editing tools, including trimming, color correction, and effects addition.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Green Screen Replacement:&lt;/strong&gt; Achieve high-quality background replacements without needing a professional studio.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runway is particularly well-suited for creators who need to quickly produce high-quality video content, such as YouTubers, marketers, and even small production teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Easy to use, powerful features, and professional results.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; It's pricey and demands a high-performance computer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zy1qg5tv1zyqxe1hgp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zy1qg5tv1zyqxe1hgp7.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pika
&lt;/h2&gt;

&lt;p&gt;Pika, developed by Pika Labs, is an &lt;a href="https://promptchoose.com/ai-tools/ai-generating-ppt-tool/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video generation and editing tool that has recently garnered significant attention!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What sets Pika apart?&lt;/strong&gt; Its focus on simplicity and high-quality output. Just enter a text description, and Pika will generate a corresponding video. The quality of the videos it produces is quite impressive, with smooth visuals and rich content.&lt;/p&gt;

&lt;p&gt;Pika is especially ideal for those needing to quickly create short videos, such as social media managers and content creators. Its strengths lie in its ease of use, fast generation speed, and support for various video styles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;However,&lt;/strong&gt; Pika has some limitations. For instance, it currently doesn't support complex video editing features, so if you need deep customization, you might need to use additional tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Synthesia
&lt;/h2&gt;

&lt;p&gt;When it comes to &lt;a href="https://promptchoose.com/ai-tools/github-open-source-ai-agent-project-overview/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video generation, Synthesia is a name that can't be overlooked. &lt;strong&gt;What is it best known for?&lt;/strong&gt; Its AI virtual presenter feature!&lt;/p&gt;

&lt;p&gt;Synthesia allows you to create realistic AI character videos. Just input text, choose a virtual presenter, and Synthesia will generate a video that looks like a real person speaking. This feature is particularly useful for creating training videos, product introductions, or news reports.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt; Saves time and effort by eliminating the need for a human on-screen presence, while producing professional-level videos. Additionally, it supports multiple languages, making video localization easy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Despite its realistic appearance, some viewers might still notice slight unnatural elements. Furthermore, its level of customization is relatively low, so if you need highly personalized content, a human presenter may still be necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fliki
&lt;/h2&gt;

&lt;p&gt;Fliki is an &lt;a href="https://promptchoose.com" rel="noopener noreferrer"&gt;AI tool&lt;/a&gt; particularly well-suited for video marketing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes Fliki unique&lt;/strong&gt; is its ability to convert text directly into video. Just paste an article or blog post, and Fliki will automatically generate a video complete with visuals, music, and narration. This feature is a lifesaver for those needing to quickly transform written content into video format!&lt;/p&gt;

&lt;p&gt;Fliki is especially useful for content marketers, educators, or anyone who frequently needs to create explainer videos. &lt;strong&gt;Pros:&lt;/strong&gt; Simple to use, fast generation, and supports multiple languages for text-to-speech conversion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; The videos it generates might have a somewhat fixed style, so if you need highly creative or personalized videos, additional manual intervention may be required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lumen5
&lt;/h2&gt;

&lt;p&gt;Lumen5 is another AI video creation tool worth recommending. &lt;strong&gt;What is its main feature?&lt;/strong&gt; It's particularly well-suited for creating social media videos.&lt;/p&gt;

&lt;p&gt;Using Lumen5, you can easily convert blog posts, news articles, or any text content into engaging short videos. Its smart &lt;a href="https://promptchoose.com/ai-tools/top-ai-image-generation-tool/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; system can analyze your text, select appropriate visuals, music, and captions, and automatically generate an eye-catching video.&lt;/p&gt;

&lt;p&gt;Lumen5 is especially beneficial for those who frequently need to post video content on social media, such as social media managers and content marketers. &lt;strong&gt;Pros:&lt;/strong&gt; Easy to use, a wide selection of templates, and the videos generated are perfect for social media sharing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; The generated videos might appear a bit "templated," so if you're aiming for a very unique visual style, some post-generation adjustments might be necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pictory
&lt;/h2&gt;

&lt;p&gt;Pictory is an &lt;a href="https://promptchoose.com/ai-tools" rel="noopener noreferrer"&gt;AI tool&lt;/a&gt; particularly well-suited for converting long videos into short ones. In this era of short video dominance, Pictory is truly timely!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is its most powerful feature?&lt;/strong&gt; The ability to automatically extract the essence from long videos and generate short videos that are perfect for social media sharing. Just upload a long video, and Pictory will analyze the content, select key segments, and then generate a concise and impactful short video.&lt;/p&gt;

&lt;p&gt;Pictory is especially useful for those who need to process a large volume of video content, such as video bloggers, marketing teams, or educational institutions. &lt;strong&gt;Pros:&lt;/strong&gt; Saves a lot of editing time and usually captures the essence of the original video in the short version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; While its extraction feature is powerful, it might sometimes miss content that you consider important. Therefore, some manual review and adjustment might still be necessary.&lt;/p&gt;

&lt;h2&gt;
  
  
  DeepBrain AI
&lt;/h2&gt;

&lt;p&gt;Finally, let's take a look at DeepBrain AI, a platform focused on &lt;a href="https://promptchoose.com/ai-tools/ai-programming-tools/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; virtual human technology. &lt;strong&gt;What makes it unique&lt;/strong&gt; is its ability to create highly realistic AI presenters.&lt;/p&gt;

&lt;p&gt;With DeepBrain AI, you can create your virtual presenter to deliver your content with natural voice and expressions. This tool not only generates videos but can also be used for live streaming and other real-time scenarios.&lt;/p&gt;

&lt;p&gt;DeepBrain AI is especially suitable for scenarios where a large amount of video content is needed, but frequent human shooting is not desirable, such as news broadcasting, product demonstrations, or online education. &lt;strong&gt;Pros:&lt;/strong&gt; Can work 24/7 without mistakes, effortlessly achieves multi-language content.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt; Despite its impressive realism, it may still trigger the "uncanny valley" effect in some viewers. Additionally, using an AI presenter might lack the emotional connection and interactivity that a human presenter can offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison of AI Video Generation Tools
&lt;/h2&gt;

&lt;p&gt;After discussing so many &lt;a href="https://promptchoose.com/ai-tools/vscode-ai-coding-assistant-with-autocomplete/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video tools, you might feel a bit overwhelmed. Don't worry, let's do a quick comparison:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Functionality:&lt;/strong&gt; Runway offers the most comprehensive features; Synthesia and DeepBrain AI excel in virtual presenters, while Pictory stands out in video editing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ease of Use:&lt;/strong&gt; Fliki and Lumen5 are probably the most user-friendly, especially for beginners.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Output Quality:&lt;/strong&gt; Overall, Runway and Pika deliver high-quality output, but other tools also perform well in their specialized areas.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; These tools mostly adopt a subscription model, with prices ranging from tens to hundreds of dollars per month. Runway and DeepBrain AI might be on the pricier side, while Fliki and Lumen5 are more affordable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Future Trends in AI Video Generation Tools
&lt;/h2&gt;

&lt;p&gt;Now that we've covered the current landscape, let's talk about the future. The development of &lt;a href="https://jsnoteclub.com" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video generation technology is evolving rapidly!&lt;/p&gt;

&lt;p&gt;I believe future &lt;a href="https://promptchoose.com/ai-tools/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video tools will be more intelligent and natural. Some of the current shortcomings, such as stiff AI presenter expressions or choppy transitions, will likely be addressed.&lt;/p&gt;

&lt;p&gt;AI video tools will likely merge with other technologies, such as VR and AR. Imagine generating VR movies with &lt;a href="https://zguyun.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; in the future—that would be incredibly cool!&lt;/p&gt;

&lt;p&gt;The development of these tools will also impact the traditional video production industry. However, I see it more as an opportunity than a threat. These tools can help creators realize their ideas more effectively and allow more people to create high-quality video content.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;These &lt;a href="https://jsnoteclub.com/blog/best-ai-video-generation-tools/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; video generation tools have indeed revolutionized video creation. Whether saving time and effort or achieving effects that were once unimaginable, AI video tools have shown tremendous potential.&lt;/p&gt;

&lt;p&gt;If you're considering trying these tools, my advice is to first clarify your needs. Are you creating short videos or long videos? Do you need virtual presenters, or are you more focused on visual generation? Choose the right tool based on your specific requirements. AI is not here to replace human creativity but to enhance it. So instead of worrying about AI taking our jobs, let's learn how to use these new tools to take our creativity to the next level!&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>AI Document Writing Tools</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Sun, 20 Oct 2024 08:17:35 +0000</pubDate>
      <link>https://forem.com/serenepine/ai-document-writing-tools-ihm</link>
      <guid>https://forem.com/serenepine/ai-document-writing-tools-ihm</guid>
      <description>&lt;p&gt;With the development of &lt;a href="https://promptchoose.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; technology, more and more &lt;a href="https://zguyun.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; tools are entering our daily lives, especially in document writing. These tools not only help us improve writing efficiency but also provide significant assistance in creativity, proofreading, and other aspects. Below, we will recommend 7 practical &lt;a href="https://jsnoteclub.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; document writing tools and provide an overview of their basic information through tables.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;&lt;strong&gt;Tool Name&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;&lt;strong&gt;Supported Systems&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;&lt;strong&gt;Tool Address&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;QuillBot&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Linux&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://quillbot.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Grammarly&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, iOS, Android&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://www.grammarly.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;ProWritingAid&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Web&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://prowritingaid.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Hemingway Editor&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Web&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://hemingwayeditor.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Writer.com&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://writer.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Sudowrite&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://sudowrite.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;AI Writer&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://aiwriter.io/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  QuillBot
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;QuillBot&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Linux&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://quillbot.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;QuillBot is a powerful online &lt;a href="https://zguyun.com/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; writing assistant that can help users rewrite sentences, generate article summaries, and perform grammar checks, among other tasks. For students and writers, it is a very useful tool for improving the style and clarity of papers or stories. One of the features of QuillBot is its robust synonym replacement function, which makes the text more varied and avoids repetition. Additionally, QuillBot offers various modes for users to choose from, including standard, smooth, formal, etc., to meet the needs of different scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  Grammarly
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Grammarly&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, iOS, Android&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://www.grammarly.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Grammarly is a globally renowned grammar checking and writing assistance tool. It helps users automatically detect and correct spelling errors, grammatical errors, and style issues when writing emails, documents, or social media comments. In addition to basic grammar checking, Grammarly also provides tone analysis, vocabulary suggestions, and other functions to make users' writing more professional. Its browser plugin version is particularly popular; after installation, it can be used directly on most web pages, greatly enhancing the convenience and efficiency of writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  ProWritingAid
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;ProWritingAid&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Web&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://prowritingaid.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;ProWritingAid is a comprehensive writing assistant designed to help authors improve the quality of their work. The services it provides are not limited to basic grammar and spelling checks but also include style analysis, overused word detection, passive voice recognition, and many other advanced features. ProWritingAid is particularly suitable for those who wish to enhance their writing skills, whether they are novelists, bloggers, or academic researchers. Through detailed reports, users can understand their writing habits and make corresponding adjustments according to the suggestions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hemingway Editor
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Hemingway Editor&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Windows, Mac, Web&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://hemingwayeditor.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hemingway Editor is a simple yet efficient writing editor named after the famous writer Ernest Hemingway. This application focuses on simplifying the writing process to make the text clearer and more powerful. The main feature of Hemingway Editor is its ability to highlight complex sentence structures, passive voice, strong words, and adverbs, helping authors easily identify and correct these issues. For those pursuing a concise and brisk writing style, Hemingway Editor is undoubtedly an ideal tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writer.com
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Writer.com&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://writer.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Writer.com offers a complete set of writing solutions aimed at improving the quality and efficiency of team communication within enterprises. It includes not only basic grammar and spelling checks but also helps ensure consistency and brand voice in internal company documents. Writer.com particularly emphasizes collaboration functions, allowing multiple authors to edit the same document simultaneously and view changes in real-time. Moreover, the platform integrates project management tools, making teamwork smoother. For enterprises where remote working is becoming increasingly common, Writer.com is an invaluable helper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sudowrite
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Sudowrite&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;No&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://sudowrite.com/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Sudowrite is an &lt;a href="https://zguyun.com/blog/open-source-face-swap-projects-on-github/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; writing assistant specifically designed for writers, helping creators overcome creative blocks and inspire new ideas. The platform offers various writing modes, such as plot generation, character development, dialogue creation, etc., making it perfect for novel writing and scriptwriting. Sudowrite's strength lies in its ability to understand context and generate high-quality content based on user needs. Whether you are a beginner or an experienced writer, you can gain valuable writing support from Sudowrite.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Writer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Name&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;AI Writer&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Supported Systems&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Web&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Free&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Partially Free&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Open Source&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Yes&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;Tool Address&lt;/p&gt;&lt;/td&gt;
&lt;td colspan="1" rowspan="1"&gt;&lt;p&gt;https://aiwriter.io/&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;AI Writer is a web-based open-source &lt;a href="https://promptchoose.com/ai-tools/ai-face-swapping-tool/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; writing tool that allows anyone to freely use and modify the software to meet specific personal or organizational needs. This tool provides a wide range of functions, including but not limited to article creation, blog writing, social media post editing, etc. The interface of AI Writer is user-friendly and easy to get started with, even for programming beginners. As an open-source project, the &lt;a href="https://jsnoteclub.com/blog/ai-image-expansion-tools/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; Writer community is active, often introducing new updates and features, ensuring long-term availability and reliability.&lt;/p&gt;




&lt;p&gt;The above are the 7 &lt;a href="https://promptchoose.com/ai-tools/" rel="noopener noreferrer"&gt;AI&lt;/a&gt; document writing tools I have carefully selected for you. Each has its unique advantages and applicable scenarios. I hope these introductions can help you find the right writing assistant. Whether it's to improve writing efficiency or to find inspiration, there is bound to be a tool that meets your needs.&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/open-source-face-swap-projects-on-github/" rel="noopener noreferrer"&gt;Open-Source Face-Swap Projects on Github&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/github-open-source-ai-girlfriend-projects/" rel="noopener noreferrer"&gt;GitHub Open-Source AI Girlfriend Projects&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/github-ai-translation-projects/" rel="noopener noreferrer"&gt;GitHub AI Translation Projects&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/windows-ocr-tools/" rel="noopener noreferrer"&gt;Windows OCR Tools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/windows-markdown-tools/" rel="noopener noreferrer"&gt;Windows Markdown Tools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/mysql-graphical-tools-recommendations/" rel="noopener noreferrer"&gt;MySQL Graphical Tools&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>How to set global request header information in Postman</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Wed, 28 Feb 2024 14:06:18 +0000</pubDate>
      <link>https://forem.com/serenepine/how-to-set-global-request-header-information-in-postman-36md</link>
      <guid>https://forem.com/serenepine/how-to-set-global-request-header-information-in-postman-36md</guid>
      <description>&lt;p&gt;&lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; is a powerful API development tool that not only allows users to send requests and test APIs but also enables them to set global request header information to ensure that each request contains the same header information every time it is sent. In this article, we will detail how to set global request header information in &lt;a href="https://zguyun.com/blog/how-to-use-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Global Request Header Information?
&lt;/h2&gt;

&lt;p&gt;In HTTP requests, header information contains important details about the request and response. Sometimes, we want to include the same header information with every request, and setting global request header information is useful for this purpose. By setting global request header information, we can ensure that each request includes pre-defined header fields and their corresponding values.&lt;/p&gt;

&lt;h2&gt;
  
  
  Steps to Set Global Request Headers
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1.Open Postman and select or create a collection.
&lt;/h3&gt;

&lt;p&gt;Make sure you have opened the &lt;a href="https://zguyun.com/blog/comprehensive-guide-to-implementing-automated-testing-in-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; application. Then, in the left sidebar, select or create a collection where you want to add global request header information to organize your requests. Left-click on the chosen collection or click on the three dots next to the collection name and select the "Edit" option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzr712guxdteu7kp0qaje.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzr712guxdteu7kp0qaje.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2.Add Global Request Header Information
&lt;/h3&gt;

&lt;p&gt;In the collection settings page, you will see an option named "Authorization". Under this option, you can add some global request header information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8a9a89ao0yjsqy4ijvo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe8a9a89ao0yjsqy4ijvo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For example, if you have a login interface, and you have set the token credential of the interface via Tests script into an environment variable, now you want to apply this token credential to all interfaces under this collection. You can choose the Type as Bearer Token here and reference the token value from the environment variable using &lt;strong&gt;&lt;code&gt;{{}}&lt;/code&gt;&lt;/strong&gt;. This way, when requests are made by interfaces under the collection, they will automatically carry this token credential.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l7grz6f6knio6c9j2mu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8l7grz6f6knio6c9j2mu.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you want to set other types of request headers, you can also click on the "Pre-request Scripts" tab to enter the request script page and write a script to add headers. In the request script page, you can write JavaScript code to add request headers. Here is an example code:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="c1"&gt;// Set global request header&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bearer your_access_token_here&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;// Add other request headers&lt;/span&gt;
&lt;span class="nx"&gt;pm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Please note that you can modify the request header fields and values according to your needs in the above code.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5fpbcmdsguk6srr2ide.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz5fpbcmdsguk6srr2ide.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3.Verify Global Request Header Settings
&lt;/h3&gt;

&lt;p&gt;Now that you have successfully set the global request header information, to ensure that your requests are using these headers correctly, you can open any request and verify if they are included under the headers section. You can check by clicking on the request path in the Console.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjqjh1qoyn2kuxz2ma2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjqjh1qoyn2kuxz2ma2u.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Key steps in setting global request header information using &lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; include adding the required header information to the collection settings page, ensuring the appropriate type and value are selected, adding additional request headers if necessary through JavaScript scripts, and finally verifying that the settings have taken effect.&lt;/p&gt;

&lt;p&gt;Reference：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://learning.postman.com/docs/sending-requests/requests/?ref=zguyun.com#headers" rel="noopener noreferrer"&gt;Postman Documentation - Setting Headers&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/how-to-send-requests-in-a-loop-in-postman/" rel="noopener noreferrer"&gt;How to send requests in a loop in Postman&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/comprehensive-guide-to-implementing-automated-testing-in-postman/" rel="noopener noreferrer"&gt;Comprehensive Guide to Implementing Automated Testing in Postman: A Deep Dive&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zguyun.com/blog/how-to-add-certificate-in-postman/" rel="noopener noreferrer"&gt;How to add certificate in Postman?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zguyun.com/blog/how-to-convert-timestamps-in-postman/" rel="noopener noreferrer"&gt;How to convert timestamps in Postman?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://zguyun.com/blog/how-to-import-a-json-file-into-postman/" rel="noopener noreferrer"&gt;How to import a JSON file into Postman？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>postman</category>
    </item>
    <item>
      <title>8 Awesome JavaScript String Manipulation Techniques</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Tue, 19 Dec 2023 15:29:26 +0000</pubDate>
      <link>https://forem.com/serenepine/8-awesome-javascript-string-manipulation-techniques-fdh</link>
      <guid>https://forem.com/serenepine/8-awesome-javascript-string-manipulation-techniques-fdh</guid>
      <description>&lt;p&gt;When working with &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript?ref=jsnoteclub.com"&gt;JavaScript&lt;/a&gt; strings, there are many interesting techniques that can enhance our coding efficiency. In this article, I will introduce some &lt;a href="https://jsnoteclub.com/"&gt;JavaScript&lt;/a&gt; tricks related to strings to make you more proficient in string manipulation. Let's dive in!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MrvYUwGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://jsnoteclub.com/content/images/2023/12/jsnoteclub-javascript-js-tools-and-tips-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MrvYUwGB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://jsnoteclub.com/content/images/2023/12/jsnoteclub-javascript-js-tools-and-tips-1.png" alt="8 Awesome JavaScript String Manipulation Techniques" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;String Padding&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Sometimes, we may need to ensure that a string reaches a specific length. This is where the &lt;code&gt;padStart&lt;/code&gt; and &lt;code&gt;padEnd&lt;/code&gt; methods come in handy. These methods are used to pad a specified character at the beginning and end of a string until it reaches the specified length.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use the padStart method to pad "0" characters at the beginning of the string until the length is 8&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;binary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;101&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;padStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;binary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "00000101"&lt;/span&gt;

&lt;span class="c1"&gt;// Use the padEnd method to pad "*" characters at the end of the string until the length is 10&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;padEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; *&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Hello * * *"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;String Reversal&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reversing characters in a string is a common requirement, and it can be achieved using the spread operator (&lt;code&gt;...&lt;/code&gt;), the &lt;code&gt;reverse&lt;/code&gt; method, and the &lt;code&gt;join&lt;/code&gt; method.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Reverse the characters in the string, using the spread operator, reverse method, and join method&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;developer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;reversedStr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;reverse&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;reversedStr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "repoleved"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Capitalize the First Letter&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To capitalize the first letter of a string, various methods can be used, such as &lt;code&gt;toUpperCase&lt;/code&gt; and &lt;code&gt;slice&lt;/code&gt; methods or using an array of characters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// To capitalize the first letter, use toUpperCase and slice methods&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;city&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;paris&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;city&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;toUpperCase&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;city&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// "Paris"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;String to Array Conversion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you need to split a string into a character array, you can use the spread operator (&lt;code&gt;...&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Split the string into a character array using the spread operator&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;JavaScript&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;characters&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Splitting Strings with Multiple Delimiters&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Besides regular string splitting, you can use regular expressions to split a string based on multiple delimiters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Split string on multiple delimiters using regular expressions and split method&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;java,css;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="se"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;,;&lt;/span&gt;&lt;span class="se"&gt;]&lt;/span&gt;&lt;span class="sr"&gt;/&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// ["java", "css", "javascript"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Checking if a String Contains a Specific Sequence&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;You can use the &lt;code&gt;includes&lt;/code&gt; method to check if a string contains a specific sequence without using regular expressions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use the includes method to check if a string contains a specific sequence&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript is fun&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;javascript&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Checking if a String Starts or Ends with a Specific Sequence&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you need to check if a string starts or ends with a specific sequence, you can use the &lt;code&gt;startsWith&lt;/code&gt; and &lt;code&gt;endsWith&lt;/code&gt; methods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use startsWith and endsWith methods to check if a string starts or ends with a specific sequence&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello, world!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;startsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endsWith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;world&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;String Replacement&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To replace all occurrences of a specific substring in a string, you can use regular expression methods with global flags or the new &lt;code&gt;replaceAll&lt;/code&gt; method (note: not supported in all browsers and Node.js versions).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Use the replace method combined with a regular expression with global flags to replace all occurrences of a string.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;I love JavaScript, JavaScript is amazing!&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/JavaScript/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Node.js&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// "I love Node.js, Node.js is amazing!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;JavaScript string manipulation goes beyond simple concatenation and trimming. The 8 techniques introduced in this article are just a part of string operations, and there are many more waiting for you to explore.&lt;/p&gt;

&lt;p&gt;These tricks will make you more flexible and efficient when working with strings. I hope these techniques are helpful in your programming journey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://jsnoteclub.com/blog/11-useful-javascript-tips-to-boost-your-efficiency/"&gt;11 Useful JavaScript Tips to Boost Your Efficiency&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://jsnoteclub.com/blog/how-to-create-a-grid-of-divs-using-javascript/"&gt;How to Create a Grid of Divs Using JavaScript&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://jsnoteclub.com/blog/30-javascript-one-liners-to-turn-you-into-a-javascript-wizard/"&gt;30 JavaScript One-Liners to Turn You into a JavaScript Wizard&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://jsnoteclub.com/blog/how-to-call-javascript-functions-in-html-without-using-onclick/"&gt;How to Call JavaScript Functions in HTML Without Using onclick&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/top-javascript-frameworks-to-learn-in-2024-blitz-solidjs-svelte-and-more/"&gt;Top JavaScript Frameworks to Learn in 2024: Blitz, SolidJS, Svelte, and More&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Article Link:&lt;a href="https://jsnoteclub.com/blog/11-useful-javascript-tips-to-boost-your-efficiency/"&gt;https://jsnoteclub.com/blog/11-useful-javascript-tips-to-boost-your-efficiency/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jsnoteclub.com/"&gt;JsNoteClub&lt;/a&gt;&lt;em&gt;:Share interesting and useful JavaScript tools and tips.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>NextJS vs RedwoodJS</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Tue, 05 Dec 2023 02:10:29 +0000</pubDate>
      <link>https://forem.com/serenepine/nextjs-vs-redwoodjs-48hn</link>
      <guid>https://forem.com/serenepine/nextjs-vs-redwoodjs-48hn</guid>
      <description>&lt;p&gt;Web development frameworks in JavaScript, such as &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; and &lt;a href="https://redwoodjs.com/" rel="noopener noreferrer"&gt;RedwoodJS&lt;/a&gt;, have gained popularity among developers. Choosing the right framework, library, or tool for a project is crucial for efficient development. Developers often seek the best tools to save time and avoid reinventing the wheel.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://zguyun.com/blog/nextjs-vs-redwoodjs/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; and &lt;a href="https://zguyun.com/blog/nextjs-vs-redwoodjs/" rel="noopener noreferrer"&gt;RedwoodJS&lt;/a&gt; both offer unique advantages and disadvantages, and the choice between them depends on the specific requirements and preferences of your project. In this article, we’ll delve into the details of NextJS and RedwoodJS, exploring their differences and conducting an in-depth comparison.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is NextJS?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8k01dfjki44cjm16l70i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8k01dfjki44cjm16l70i.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;NextJS is a framework for building server-rendered &lt;a href="https://react.dev/" rel="noopener noreferrer"&gt;React&lt;/a&gt; applications. Known for its simplicity and ease of use, NextJS is a popular choice for developers aiming to quickly build and deploy production-ready web applications. It provides features such as automatic code splitting, server-side rendering, built-in CSS in JS support, SEO optimization, and a straightforward API for building server-based and statically generated React applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Uses NextJS?
&lt;/h2&gt;

&lt;p&gt;NextJS has been successfully used by organizations like Vercel, Uber, Airbnb, Twitch, Alibaba, Dropbox, ESPN, Twitter, and GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is RedwoodJS?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtc67mwexv1le6b0m27p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbtc67mwexv1le6b0m27p.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other hand, RedwoodJS is a full-stack framework that utilizes React on the frontend and &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; on the backend. It aims to facilitate the easy construction and maintenance of complex web applications by providing a consistent structure and a set of conventions for code organization. RedwoodJS also incorporates support for serverless deployment, making it a good choice for building scalable and cost-effective applications.&lt;/p&gt;

&lt;p&gt;Key features of RedwoodJS include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Building on React for the frontend and Node.js for the backend&lt;/li&gt;
&lt;li&gt;  A powerful CLI for creating and building new projects&lt;/li&gt;
&lt;li&gt;  Data management and operations using GraphQL&lt;/li&gt;
&lt;li&gt;  Integrated permission systems and authentication support&lt;/li&gt;
&lt;li&gt;  Built-in testing tools, supporting continuous integration and deployment&lt;/li&gt;
&lt;li&gt;  Designed to enable developers to build and deploy web applications quickly and efficiently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Similarities between RedwoodJS and NextJS
&lt;/h2&gt;

&lt;p&gt;In this section, let’s explore the commonalities between RedwoodJS and NextJS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Both frameworks are designed to allow developers to easily create fast, secure, and scalable web applications.&lt;/li&gt;
&lt;li&gt;  They both use the ReactJS library for building user interfaces (UI), making it easy for developers familiar with ReactJS to work with either framework.&lt;/li&gt;
&lt;li&gt;  Support for server-side rendering, allowing developers to render web pages on the server rather than in the browser, enhancing the performance of web applications.&lt;/li&gt;
&lt;li&gt;  Additionally, both RedwoodJS and NextJS support automatic code splitting, enabling developers to divide their web applications into smaller chunks that can be loaded as needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who Uses RedwoodJS?
&lt;/h2&gt;

&lt;p&gt;Large companies rely on RedwoodJS for their websites, including GitLab, OpenFn, Tidelift, Vercel, Replicated, Qardio, Honeybager, Raygun, and Tidelift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Comparison of RedwoodJS and NextJS
&lt;/h2&gt;

&lt;p&gt;Determining which framework is better depends on the specific requirements and demands of your project. If you need a straightforward framework for building server-rendered React applications, NextJS might be the better choice. However, if you require a full-stack framework with built-in support for GraphQL and serverless deployment, RedwoodJS might be more suitable. Ultimately, the best framework for you depends on your specific needs and requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;p&gt;Let’s address some common questions about these frameworks:&lt;/p&gt;

&lt;h2&gt;
  
  
  Can I learn RedwoodJS if I already know NextJS?
&lt;/h2&gt;

&lt;p&gt;Yes, you can learn RedwoodJS if you already know NextJS. While RedwoodJS is built on top of NextJS, it has unique features and functionality. Learning RedwoodJS involves becoming familiar with its core concepts and components, such as GraphQL-based APIs and serverless capabilities. However, your knowledge of NextJS may make it easier for you to understand and use RedwoodJS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is RedwoodJS better than NextJS?
&lt;/h2&gt;

&lt;p&gt;RedwoodJS and NextJS are both popular choices for building server-rendered React applications, each with its pros and cons. Ultimately, the best choice for your project depends on your specific requirements and priorities. Evaluating multiple options and comparing their features and functionality is always a good idea before making a decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;When choosing between &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;NextJS&lt;/a&gt; and &lt;a href="https://redwoodjs.com/" rel="noopener noreferrer"&gt;RedwoodJS&lt;/a&gt;, the decision ultimately depends on the specific requirements and goals of your project. Both frameworks offer unique features and benefits, and selecting the right framework depends on personal preferences and project needs.&lt;/p&gt;

&lt;p&gt;NextJS is a popular React-based framework known for server-side rendering, automatic code splitting, optimized performance, and an easy-to-use development environment. It is widely used for building efficient, fast-loading, and SEO-friendly web applications.&lt;/p&gt;

&lt;p&gt;On the other hand, RedwoodJS is a full-stack framework providing a complete end-to-end development environment for building modern web applications. It uses &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt; for data management and offers powerful CLI tools, automatic code generation, and integrated testing support.&lt;/p&gt;

&lt;p&gt;In terms of performance, NextJS is renowned for its optimized code and fast-loading pages, making it an excellent&lt;/p&gt;

&lt;p&gt;choice for building high-performance web applications. On the other hand, RedwoodJS provides a more comprehensive development environment, making it a good choice for projects requiring a full-stack solution.&lt;/p&gt;

&lt;p&gt;Both NextJS and RedwoodJS are powerful and practical frameworks for building modern web applications. The choice between them ultimately depends on the specific requirements and goals of your project, as well as personal preferences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/ai-drawing-basics-introduction-understanding-all-technical-terms/" rel="noopener noreferrer"&gt;AI Drawing Basics Introduction! Understanding All Technical Terms&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/annual-most-popular-nodejs-frameworks/" rel="noopener noreferrer"&gt;2023’s Most Popular Node.js Frameworks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/top-javascript-frameworks-to-learn-in-2024-blitz-solidjs-svelte-and-more/" rel="noopener noreferrer"&gt;Top JavaScript Frameworks to Learn in 2024: Blitz, SolidJS, Svelte, and More&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/the-differences-between-nuxtjs-nextjs-and-nestjs/" rel="noopener noreferrer"&gt;The Differences Between Nuxt.js, Next.js, and Nest.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/how-to-parse-html-in-nodejs/" rel="noopener noreferrer"&gt;How to Parse HTML in Node.js? Different Ways to Parse HTML in Node.js&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/how-to-test-cors-with-postman/" rel="noopener noreferrer"&gt;How to Test Cors with Postman&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/ai-drawing-basics-introduction-understanding-all-technical-terms/" rel="noopener noreferrer"&gt;AI Drawing Basics Introduction! Understanding All Technical Terms&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://zguyun.com/blog/understanding-and-prospects-of-openai-q-star/" rel="noopener noreferrer"&gt;OpenAI’s Q*(Q-Star) : Unveiling the Game-Changing Model That’s Stirring Controversy in AI Circles&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Article Link：&lt;/em&gt;&lt;a href="https://zguyun.com/blog/nextjs-vs-redwoodjs/" rel="noopener noreferrer"&gt;&lt;em&gt;https://zguyun.com/blog/nextjs-vs-redwoodjs/&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zguyun.com/" rel="noopener noreferrer"&gt;ZGY&lt;/a&gt;:Share more interesting programming and AI knowledge.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
    </item>
    <item>
      <title>How to Send JSON Data in Postman</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Thu, 23 Nov 2023 09:09:40 +0000</pubDate>
      <link>https://forem.com/serenepine/how-to-send-json-data-in-postman-90a</link>
      <guid>https://forem.com/serenepine/how-to-send-json-data-in-postman-90a</guid>
      <description>&lt;p&gt;&lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; is a powerful API development and testing tool widely used by developers, testers, and API engineers in their daily workflows. It offers a user-friendly interface and rich features, making testing and debugging APIs efficient and straightforward.&lt;/p&gt;

&lt;p&gt;This article aims to provide beginners with a step-by-step guide, enabling them to successfully send JSON requests in Postman. By mastering these fundamental steps, you will gain a better understanding of the API request process, enhancing their efficiency in API testing and development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-Step Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Install and Set Up Postman
&lt;/h3&gt;

&lt;p&gt;Firstly, ensure that you have &lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; installed. You can download and install the Postman application from the official website (&lt;a href="https://www.postman.com/" rel="noopener noreferrer"&gt;https://www.postman.com&lt;/a&gt;). Once installed, open Postman and either create a new account or log in to your existing account.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create a New Request
&lt;/h3&gt;

&lt;p&gt;On the main interface of Postman, you'll find a "+ New" button. Click on this button and select "Request" to create a new request. Give your request a meaningful name for easy identification in subsequent operations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foeae3gh4xxxd2ljohg6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foeae3gh4xxxd2ljohg6j.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Set Request Type to POST
&lt;/h3&gt;

&lt;p&gt;In the request settings, you will find a dropdown menu. Select this menu and set the request type to "POST." This is because we will be sending JSON-formatted data to the server, and POST requests are commonly used for such data transmission.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x1i0hkf29zegukewcgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x1i0hkf29zegukewcgu.png" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Fill in the Request URL
&lt;/h3&gt;

&lt;p&gt;In the request settings, there is a text box for entering the URL. Based on the documentation of the API you want to access, input the correct URL. Ensure the correctness of the URL to prevent the request from being sent to the wrong endpoint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe6lefhtjxl6g693a56l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxe6lefhtjxl6g693a56l.png" alt="Image description" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 5: Add JSON Data to the Request Body
&lt;/h3&gt;

&lt;p&gt;In the Postman interface, you'll see a tab labeled "Body." Click on this tab, select the "raw" format, and choose "JSON (application/json)" as the data type from the dropdown menu. Enter the JSON data you want to send in the text box.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
   "name": "Add your name in the body",
   "password": "*********" 
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Send the Request and View the Response
&lt;/h3&gt;

&lt;p&gt;Click the "Send" button on the Postman interface. Postman will send a POST request to the specified API, and the server's response will be displayed below the interface. You can view information such as the status code and response body in the response.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdepuvti22bmz3yxjbtep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdepuvti22bmz3yxjbtep.png" alt="Image description" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;p&gt;When sending JSON requests in &lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt;, some common issues may arise. Here are some suggestions and solutions:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;URL Errors:&lt;/strong&gt; Ensure the entered URL is correct, including the protocol (http/https), domain, and path.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JSON Format Errors:&lt;/strong&gt; Validate your JSON data for compliance. Use online JSON validation tools to check for syntax errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Request Type Errors:&lt;/strong&gt; If the API documentation specifies using GET instead of POST, make sure to correctly set the request type.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permission Issues:&lt;/strong&gt; Check if your Postman account has the necessary permissions to access the required API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Mastering the skill of sending JSON requests in &lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; is crucial for effective API testing and development. Through the step-by-step guide provided in this article, readers should now be able to effortlessly create and send JSON requests, gaining a better understanding of the API interaction process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. How do I import and export requests in Postman?
&lt;/h3&gt;

&lt;p&gt;You can use Postman's import and export features to share requests in different environments. In Postman, click on the "Import" or "Export" button in the upper-left corner and follow the prompts.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What HTTP methods does Postman support?
&lt;/h3&gt;

&lt;p&gt;Postman supports common HTTP methods such as GET, POST, PUT, DELETE, etc. When creating a request, you can choose the appropriate HTTP method.&lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://www.postman.com/?ref=zguyun.com" rel="noopener noreferrer"&gt;Postman Official Website&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://jsonlint.com/?ref=zguyun.com" rel="noopener noreferrer"&gt;JSON Online Validation Tool&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Learn more:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-send-json-data-in-postman/" rel="noopener noreferrer"&gt;How to Send JSON Data in Postman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-postman/" rel="noopener noreferrer"&gt;How to Use Postman: A Comprehensive Guide from Basics to Core Features&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/what-is-postman/" rel="noopener noreferrer"&gt;What is Postman? How to Use Postman?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-generate-bearer-token-in-postman/" rel="noopener noreferrer"&gt;How to Generate Bearer Token in Postman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-add-certificate-in-postman/" rel="noopener noreferrer"&gt;How to Add Certificate in Postman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-test-cors-with-postman/" rel="noopener noreferrer"&gt;How to Test Cors with Postman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-environment-variables-in-postman/" rel="noopener noreferrer"&gt;How to Use Environment Variables in Postman&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-send-soap-requests-in-postman/" rel="noopener noreferrer"&gt;How to Send SOAP Requests in Postman: A Detailed Tutorial&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://zguyun.com/" rel="noopener noreferrer"&gt;&lt;strong&gt;&lt;em&gt;Share more interesting programming and AI knowledge.&lt;/em&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>postman</category>
      <category>json</category>
      <category>api</category>
    </item>
    <item>
      <title>JavaScript Operators, Loops, and Flow Control: A Comprehensive Guide</title>
      <dc:creator>Serenepine</dc:creator>
      <pubDate>Thu, 16 Nov 2023 15:53:59 +0000</pubDate>
      <link>https://forem.com/serenepine/javascript-operators-loops-and-flow-control-a-comprehensive-guide-1a5m</link>
      <guid>https://forem.com/serenepine/javascript-operators-loops-and-flow-control-a-comprehensive-guide-1a5m</guid>
      <description>&lt;p&gt;Explore the world of &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript?ref=zguyun.com"&gt;JavaScript&lt;/a&gt; operators, loops, and control flow in this comprehensive guide. Learn how to assign values to variables, perform arithmetic operations, and use compound operators. Discover the power of logical operators and the importance of operator precedence. Dive into conditional statements, including &lt;code&gt;if&lt;/code&gt;, &lt;code&gt;if/else&lt;/code&gt;, and the versatile ternary operator. Explore the &lt;code&gt;switch&lt;/code&gt; statement for multiple condition handling and uncover the magic of &lt;code&gt;for&lt;/code&gt;, &lt;code&gt;while&lt;/code&gt;, and &lt;code&gt;do/while&lt;/code&gt; loops. Understand how &lt;code&gt;break&lt;/code&gt; and &lt;code&gt;continue&lt;/code&gt; can control loop execution. Labels and the &lt;code&gt;for/in&lt;/code&gt; loop allow for advanced iteration techniques, while the &lt;code&gt;for/of&lt;/code&gt; loop simplifies iterating over iterable data structures. This guide provides a complete overview of JavaScript's core concepts, essential for mastering web development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EullP7QP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://zguyun.com/content/images/2023/11/Javascript-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EullP7QP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://zguyun.com/content/images/2023/11/Javascript-1.png" alt="JavaScript Operators, Loops, and Flow Control: A Comprehensive Guide" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Assignment Operators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using &lt;code&gt;=&lt;/code&gt; for Variable Assignment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let url = 'zguyun.com';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Arithmetic Operators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Arithmetic Operators Include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;+&lt;/code&gt; (Addition)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;-&lt;/code&gt; (Subtraction)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;*&lt;/code&gt; (Multiplication)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/&lt;/code&gt; (Division)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;%&lt;/code&gt; (Modulus)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = 5, b = 3;
console.log(a * b); // 15
console.log(a % b); // 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Compound Operators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Compound Operators Include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;*=&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;/=&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;+=&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;-=&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;%=&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use these to shorthand arithmetic operations, like &lt;code&gt;n *= 2&lt;/code&gt; is equivalent to &lt;code&gt;n = n * 2&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let n = 2;
n *= 2;
console.log(n);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Unary Operators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prefix Operations
&lt;/h3&gt;

&lt;p&gt;Prefix operations are executed first in an expression.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let n = 1;
++n;
console.log(n);

--n;
console.log(n);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;++n&lt;/code&gt; is a shorthand for &lt;code&gt;n = n + 1&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postfix Operations
&lt;/h3&gt;

&lt;p&gt;Postfix operations are executed last in an expression.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let n = 2;
let f = 30 + ++n;
console.log(f);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Comparison Operators
&lt;/h2&gt;

&lt;p&gt;Comparison operators allow you to compare values. Here are some examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = 1, b = 2, c = '1';

console.log(a &amp;lt; b); // true
console.log(a == b); // false
console.log(a == c); // true
console.log(a === c); // false
console.log(a == true); // true
console.log(a === true); // false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conditional Statement Example
&lt;/h2&gt;

&lt;p&gt;Prevent age from exceeding 90 years:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;input type="text" name="age" /&amp;gt;
&amp;lt;span id="msg"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;script&amp;gt;
  let span = document.querySelector("#msg");
  document
    .querySelector('[name="age"]')
    .addEventListener("keyup", function() {
      span.innerHTML = this.value &amp;gt;= 90 ? "Age cannot exceed 90 years" : "";
    });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Logical Operators
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Logical AND
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt; to represent logical AND. The expression is true when both sides are true.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = true, b = true;
if (a &amp;amp;&amp;amp; b) {
    console.log('Expression is true');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Logical OR
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;||&lt;/code&gt; to represent logical OR. The expression is true if either side is true.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = true, b = false;
if (a || b) {
    console.log('Expression is true');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Logical NOT
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;!&lt;/code&gt; to represent logical NOT. It reverses the value.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = true, b = false;
if (a &amp;amp;&amp;amp; !b) {
    console.log('Expression is true');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Operator Precedence
&lt;/h2&gt;

&lt;p&gt;You can use parentheses &lt;code&gt;()&lt;/code&gt; to control operator precedence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(true || false &amp;amp;&amp;amp; false); // true
console.log((true || false) &amp;amp;&amp;amp; false); // false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Password Matching Example
&lt;/h2&gt;

&lt;p&gt;Matching passwords and displaying an error message:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;input type="text" name="password" /&amp;gt;
&amp;lt;input type="text" name="confirm_password" /&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;span name="msg"&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;script&amp;gt;
  function queryByName(name) {
    return document.querySelector(`[name='${name}']`);
  }
  let inputs = document.querySelectorAll(
    "[name='password'],[name='confirm_password']"
  );

  [...inputs].map(item =&amp;gt; {
    item.addEventListener("keyup", () =&amp;gt; {
      let msg = "";
      if (
        queryByName("password").value !=
          queryByName("confirm_password").value ||
        queryByName("password").value.length &amp;lt; 5
      ) {
        msg = "Passwords do not match or are too short";
      }
      queryByName("msg").innerHTML = msg;
    });
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Short-Circuit Evaluation
&lt;/h2&gt;

&lt;p&gt;Example using short-circuit evaluation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let a = true, f = false;
console.log(a || f); // true
let a = true, f = false;
console.log(f &amp;amp;&amp;amp; a); // false
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using short-circuit evaluation for assignment:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let sex = prompt("What is your gender?") || "Secret";
console.log(sex);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Control Flow
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;if&lt;/code&gt; Statement
&lt;/h3&gt;

&lt;p&gt;Execute a code block if a condition is true.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let state = true;
if (true) {
    console.log('Expression is true');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can omit braces &lt;code&gt;{}&lt;/code&gt; if there's only one statement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let state = true;
if (true)
    console.log('Expression is true');
console.log('Always displayed content');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;if/else&lt;/code&gt; Statement
&lt;/h3&gt;

&lt;p&gt;Example of using multiple conditions to determine password strength:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;input type="password" name="title" /&amp;gt;
  &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
  let input = document.querySelector("[name='title']");
  input.addEventListener("keyup", function() {
    let length = this.value.length;
    let msg;
    if (length &amp;gt; 10) {
      msg = "Password is very strong";
    } else if (length &amp;gt; 6) {
      msg = "Password is moderately strong";
    } else {
      msg = "This password is weak";
    }
    document.querySelector("span").innerHTML = msg;
  });
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ternary Operator
&lt;/h3&gt;

&lt;p&gt;A shorthand for &lt;code&gt;if&lt;/code&gt; statements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let n = true ? 1 : 2;
console.log(n); // 1

let f = true ? (1 == true ? 'yes' : 'no') : 3;
console.log(f); // yes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting initial values for creating a &lt;code&gt;div&lt;/code&gt; element using the ternary operator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function div(options = {}) {
  let div = document.createElement("div");
  div.style.width = options.width ? options.width : "100px";
  div.style.height = options.height ? options.height : "100px";
  div.style.backgroundColor = options.bgcolor ? options.bgcolor : "red";
  document.body.appendChild(div);
}
div();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;switch&lt;/code&gt; Statement
&lt;/h3&gt;

&lt;p&gt;A structured way to use &lt;code&gt;if&lt;/code&gt; with multiple conditions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let name = 'Video';
switch (name) {
    case 'Product':
        console.log('zgycms.com');
        break;
    case 'Video':
        console.log('zguyun.com');
        break;
    default:
        console.log('houdunwang.com');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using multiple &lt;code&gt;case&lt;/code&gt; values together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let error = 'warning';
switch (error) {
  case 'notice':
  case 'warning':
      console.log('Warning or Notice');
      break;
  case 'error':
      console.log('Error');
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using expressions in &lt;code&gt;switch&lt;/code&gt; and &lt;code&gt;case&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function message(age) {
  switch (true) {
    case age &amp;lt; 15:
      console.log("Child");
      break;
    case age &amp;lt; 25:
      console.log("Teenager");
      break

;
    case age &amp;lt; 40:
      console.log("Young Adult");
      break;
    case age &amp;lt; 60:
      console.log("Middle-Aged");
      break;
    case age &amp;lt; 100:
      console.log("Elderly");
      break;
    default:
      console.log("Age Output Error");
  }
}
message(10);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example without &lt;code&gt;break&lt;/code&gt; in &lt;code&gt;switch&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;switch (1) {
  case 1:
    console.log(1);
  case 2:
    console.log(2);
  default:
    console.log("Default");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;while&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;A loop that executes a statement as long as a specified condition is true:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let row = 5;
document.write(`&amp;lt;table border="1" width="100"&amp;gt;`);
while (row-- != 0) {
  document.write(`&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;${row}&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;`);
}
document.write(`&amp;lt;/table&amp;gt;`);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;do/while&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;A loop that always executes its block of code at least once:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function zgy(row = 5) {
  let start = 0;
  do {
    let n = 0;
    do {
      document.write("*");
    } while (++n &amp;lt;= start);
    document.write("&amp;lt;br/&amp;gt;");
  } while (++start &amp;lt;= row);
}
zgy();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;for&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;A loop that is often used for a specific number of iterations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (let i = 10; i &amp;gt; 0; i--) {
    for (let n = 0; n &amp;lt; i; n++) {
        document.write('*');
    }
    document.write("&amp;lt;br/&amp;gt;");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creating a Pascal's Triangle using a &lt;code&gt;for&lt;/code&gt; loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (let i = 1; i &amp;lt;= 5; i++) {
  for (let n = 5 - i; n &amp;gt; 0; n--) {
      document.write('^');
  }
  for (let m = i * 2 - 1; m &amp;gt; 0; m--) {
      document.write('*');
  }
  document.write("&amp;lt;br/&amp;gt;");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Omitting some parameters in a &lt;code&gt;for&lt;/code&gt; loop:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let i = 1;
for (; i &amp;lt; 10; ) {
  console.log(i++);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;break&lt;/code&gt;/&lt;code&gt;continue&lt;/code&gt; Statements
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;break&lt;/code&gt; to exit a loop and &lt;code&gt;continue&lt;/code&gt; to skip the current iteration:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (let i = 1; i &amp;lt;= 10; i++) {
  if (i % 2) continue;
  console.log(i);
}

let count = 0, num = 3;
for (let i = 1; i &amp;lt;= 10; i++) {
  if (i % 2) {
    console.log(i);
    if (++count == num) break;
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Labels
&lt;/h3&gt;

&lt;p&gt;Labels allow you to use &lt;code&gt;continue&lt;/code&gt; and &lt;code&gt;break&lt;/code&gt; to jump to a specific location in your code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zguyun: for (let i = 1; i &amp;lt;= 10; i++) {
  zgycms: for (let n = 1; n &amp;lt;= 10; n++) {
    if (n % 2 != 0) {
      continue zgycms;
    }
    console.log(i, n);
    if (i + n &amp;gt; 15) {
      break zguyun;
    }
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;for/in&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;Used to iterate over the properties of an object. Not recommended for arrays.&lt;/p&gt;

&lt;p&gt;Iterating over an array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let zgy = [
  { title: "Chapter 1: Exploring the JavaScript Abyss", lesson: 3 },
  { title: "Setting Up a Productive Programming Environment with Ubuntu 19.10", lesson: 5 },
  { title: "Creating a Responsive Layout with Media Queries", lesson: 8 }
];
document.write(`
  &amp;lt;table border="1" width="100%"&amp;gt;
  &amp;lt;thead&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Title&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;Lessons&amp;lt;/th&amp;gt;&amp;lt;/thead&amp;gt;
`);
for (let key in zgy) {
  document.write(`
  &amp;lt;tr&amp;gt;
  &amp;lt;td&amp;gt;${zgy[key].title}&amp;lt;/td&amp;gt;
  &amp;lt;td&amp;gt;${zgy[key].lesson}&amp;lt;/td&amp;gt;
  &amp;lt;/tr&amp;gt;
  `);
}
document.write("&amp;lt;/table&amp;gt;");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iterating over an object's properties:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let info = {
  name: "ZGY",
  url: "zguyun.com"
};
for (const key in info) {
  if (info.hasOwnProperty(key)) {
    console.log(info[key]);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iterating over all properties of the &lt;code&gt;window&lt;/code&gt; object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for (name in window) {
  console.log(window[name]);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;code&gt;for/of&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;Used to iterate over iterable data structures like arrays, strings, maps, sets, etc. Unlike &lt;code&gt;for/in&lt;/code&gt;, it retrieves the values instead of the indices.&lt;/p&gt;

&lt;p&gt;Iterating over an array:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let arr = [1, 2, 3];
for (const iterator of arr) {
    console.log(iterator);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iterating over a string:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let str = 'zguyun';
for (const iterator of str) {
    console.log(iterator);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;for/of&lt;/code&gt; to iterate over an array with entries:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const zgy = ["zgycms", "zguyun"];

for (const [key, value] of zgy.entries()) {
  console.log(key, value); // This allows for easy iteration
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using &lt;code&gt;for/of&lt;/code&gt; to iterate over DOM elements:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;body&amp;gt;
  &amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;
  &amp;lt;/ul&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;script&amp;gt;
  let lis = document.querySelectorAll("li");
  for (const li of lis) {
    li.addEventListener("click", function() {
      this.style.backgroundColor = "red";
    });
  }
&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;&lt;strong&gt;Reference:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;em&gt;&lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript?ref=zguyun.com"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript&lt;/a&gt;&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Learn more:&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-install-and-configure-the-environment-for-node-js/"&gt;What is Node.js? How to install and configure the environment for Node.js?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/what-is-postman/"&gt;What is Postman? How to Use Postman?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-postman/"&gt;How to Use Postman: A Comprehensive Guide from Basics to Core Features&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-array-in-nodejs/"&gt;How to Use Array in Node.js?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-assert-in-nodejs/"&gt;How to Use assert in Node.js?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://zguyun.com/blog/how-to-use-assert-in-nodejs/"&gt;How to Use assert in Node.js?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://zguyun.com/"&gt;ZGY:Share more fun programming knowledge.&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
