整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          ASP.NET資源大全

          PI

          來源:快舔包我很肥

          框架

          • NancyFx:輕量、用于構(gòu)建 HTTP 基礎(chǔ)服務(wù)的非正式(low-ceremony)框架,基于.Net 及 Mono 平臺。
          • ASP.NET WebAPI:快捷創(chuàng)建 HTTP 服務(wù)的框架,可以廣泛用于多種不同的客戶端,包括瀏覽器和移動設(shè)備。
          • ServiceStack:架構(gòu)縝密、速度飛快、令人愉悅的 web 服務(wù)。
          • Nelibur:Nelibur 是一個使用純 WCF 構(gòu)建的基于消息的 web 服務(wù)框架。Nelibur 可以便捷地創(chuàng)建高性能、基于消息的 web 服務(wù),使得你全面擁有 WCF 的強(qiáng)大能力。


          WebAPI Contrib:幫助你提高 ASP.NET Web API 能力的開源項目集合。

          應(yīng)用框架(Application Frameworks)

          • ASP.NET Boilerplate:現(xiàn)代 ASP.NET MVC web 應(yīng)用程序的入門,包含最佳實踐和最流行的工具。
          • Orleans:Orleans 框架提供了直接構(gòu)建分布式、大規(guī)模計算應(yīng)用的方法,無需學(xué)習(xí)和使用復(fù)雜的并行或擴(kuò)展模型。
          • CoreFX:corefx 倉庫包含了 .NET 核心功能庫的實現(xiàn)(被稱為“CoreFX”)。包含了 System.Collections、System.IO、System.Xml 以及諸多其它組件。目前構(gòu)建并運行于 Windows 平臺。你可以關(guān)注這個倉庫,了解在未來的幾個月內(nèi)即將增加的對 Linux 和 Mac 的支持。
          • CSLA .NET:業(yè)務(wù)層開發(fā)框架 http://www.cslanet.com。
          • Mono:Mono 是 ECMA CLI、C# 以及 .NET 的開源實現(xiàn)。
          • Mono-Addins:Mono.Addins 是一個通用框架,用于創(chuàng)建可擴(kuò)展的應(yīng)用程序,以及這些應(yīng)用程序的擴(kuò)展插件。
          • Spring.Net:Spring.NET 是一個開源的應(yīng)用程序框架,可以便捷地創(chuàng)建企業(yè)級 .NET 項目。


          應(yīng)用模板(Application Templates)

          • MVC.Template:ASP.NET MVC 5 入門項目模板。
          • ProjectScaffold:F# 基金會推薦的 .NET 解決方案的原型——包括文件系統(tǒng)的搭建、用于管理依賴的 Paket 以及用于自動化構(gòu)建、測試的 FAKE。默認(rèn)情況下,構(gòu)建流程也會對文檔進(jìn)行編譯,并生成 NuGet 程序包。
          • Side-Waffle :包含大量有用的 Web 和桌面開發(fā)模板。Side-Waffle
          • Template10 :帶有設(shè)計模式的 Windows 10 模板。Template10


          人工智能(Artificial Intelligence)

          • AIMLBot(Program#):使用 C# 編寫的一個小型、快速、兼容標(biāo)準(zhǔn)、易于定制的聊天機(jī)器人,基于 AIML (人工智能標(biāo)記語言 Artificial Intelligence Markup Language)。
          • SIML:智能綜合智能標(biāo)記語言(Synthetic Intelligence Markup Language),下一代聊天機(jī)器人及數(shù)字助手語言。


          程序集處理(Assembly Manipulation)

          • dnSpy:dnSpy 是一個 .NET 程序集編輯器、反編譯器和調(diào)試器,來自 ILSpy 分支。
          • Fody:織入(weaving).net 程序集的可擴(kuò)展工具。
          • Mono.Cecil:Cecil 類庫用于生成和檢查 ECMA CIL 程序和庫。


          資源(Assets)

          • Cassette:管理 .NET web 應(yīng)用程序資源(腳本、css 和 模板)Cassette
          • NodeAssets:.net 資源管理器,通過 SignalR 實時更新 css,也可以使用 NodeJS 編譯器。
          • Bundler:編譯和最小化 Less、Sass、Stylus、Css、JS、CoffeeScript、LiveScript 文件。MVC集成了 MVC 和 ServiceStack。
          • ClientDependency:壓縮CSS與JS,提供WebForm與MVC版本。
          • SquishIt:讓你輕松合并一些 css 和 javascript。


          認(rèn)證和授權(quán)(Authentication and Authorization)

          • ASP.NET Identity:用于 ASP.NET 應(yīng)用程序的新身份系統(tǒng)。
          • DotNetOpenAuth:OpenID、OAuth 和 InfoCard 協(xié)議的一個 C# 實現(xiàn)。


          • Logibit Hawk:一個 F# Hawk 認(rèn)證庫。


          • IdentityModel:.NET 4.5 和 MVC4、Web API 身份和訪問控制的輔助庫。
          • IdentityServer:可擴(kuò)展的 OAuth2 和 OpenID 連接提供程序框架。
          • OAuth:超輕量級 OAuth 1.0a 簽名生成庫,C# 編寫。


          自動構(gòu)建(Build Automation)

          • Psake:基于 .NET 的自動化構(gòu)建工具,使用 PowerShell 編寫。
          • FAKE:F# Make,一個跨平臺自動構(gòu)建系統(tǒng)。
          • Invoke-Build:PowerShell 自動構(gòu)建和測試工具,靈感來自 Psake。
          • MSBuild:微軟構(gòu)建引擎(MSBuild)是 .NET 和 Visual Studio 的構(gòu)建平臺。
          • Cake:Cake(C# Make)使用 C# DSL 的跨平臺自動構(gòu)建系統(tǒng)。


          緩存(Caching)

          • CacheCow:ASP.NET Web API HTTP 客戶端和服務(wù)器端緩存實現(xiàn)。
          • Akavache:一個異步、持久化的鍵值存儲。
          • CacheManager:是用C#為.NET寫的緩存管理抽象層,支持多種緩存工具,可以實現(xiàn)層次化的緩存。


          CLI

          • Command Line Parser:Command Line Parser 類庫為 CLR 應(yīng)用程序提供了一套簡潔的 API,用于處理命令行參數(shù)及相關(guān)任務(wù)。
          • Fluent Command Line Parser:一個簡單、強(qiáng)類型的 .NET C# 命令行解析庫,交互方式流暢易用。
          • Power Args:PowerArgs 將命令行參數(shù)轉(zhuǎn)換為 .NET 對象,便于程序使用。它還提供了大量可選的擴(kuò)展,例如參數(shù)校驗、自動生成使用幫助、tab 補(bǔ)全等等。
          • UnionArgParser:針對 F# 應(yīng)用程序的聲明式 CLI 參數(shù)和 XML 配置解析器。


          CLR

          • CoreCLR:coreclr repo 包含了完整的 .NET 核心運行時實現(xiàn)(稱為“CoreCLR”)。它包括 RyuJIT、.NET GC、非托管代碼交互(native interop)等諸多組件。它目前構(gòu)建和運行于 Windows 平臺。你可以關(guān)注這個倉庫,了解未來的幾個月內(nèi)即將增加的對 Linux 和 Mac 的支持。


          CMS

          • Composite C1:一個 web 內(nèi)容管理系統(tǒng),著重在用戶體驗及適應(yīng)性。
          • mojoPortal:MojoPortal 是一個可擴(kuò)展、跨數(shù)據(jù)庫、移動友好的 web 內(nèi)容管理系統(tǒng)(CMS)和 web 應(yīng)用程序框架,使用 C# ASP.NET 編寫。
          • N2CMS:開源、輕量、代碼優(yōu)先的 CMS,可以無縫地集成到任何 MVC 項目中。
          • Orchard:免費、開源、專注社區(qū)的項目,目標(biāo)是在 ASP.NET 平臺上提供應(yīng)用程序和可重用組件。
          • Piranha CMS:Piranha 是一個有趣、快速、輕量級的 .NET 框架,用于開發(fā)基于 cms 附帶其它功能的 web 應(yīng)用程序。它基于 ASP.NET MVC 和 Web 頁面創(chuàng)建,完全兼容 Visual Studio 和 WebMatrix。
          • Umbraco:Umbraco 是一個免費開源的內(nèi)容管理系統(tǒng),基于 ASP.NET 平臺構(gòu)建。


          代碼分析和度量(Code Analysis and Metrics)

          • CodeMaid:Visual studio 擴(kuò)展,用于清理、挖掘和簡化 C#、C++、F#、VB、PHP、JSON、XAML、XML、ASP、HTML、CSS、LESS、SCSS、JavaScript 和 TypeScript 代碼。
          • StyleCop:StyleCop 使用一組風(fēng)格和一致性規(guī)則,對 C# 源代碼進(jìn)行分析和強(qiáng)制性檢查。
          • Gendarme:可擴(kuò)展的、基于規(guī)則的工具,用于在 .NET 應(yīng)用程序和類庫中查找問題。
          • Metrics-Net:捕獲 CLR 和應(yīng)用程序級別的度量值。所以你知道它的功能。


          編譯器(Compiler)

          • Bridge.NET:將 C# 編譯成 JavaScript 的開源編譯器 http://bridge.net/。
          • ClojureCLR:從 Clojure 到 CLR 的轉(zhuǎn)換,是 Clojure 項目的一部分。
          • F#:F# 編譯器、核心庫和工具——更安全、更快、代碼更好的函數(shù)式編程語言。
          • FunScript:F# 到 JavaScript 的編譯器,可以通過 TypeScript 類型提供程序使用 JQuery 等 JavaScript 庫。
          • JSIL:CIL 到 Javascript 的編譯器 http://jsil.org/。
          • Mono-basic:Visual Basic 編譯器和運行時。
          • Nemerle:Nemerle 是一個 .NET 平臺高級靜態(tài)類型編程語言。它提供函數(shù)式、面向?qū)ο笫胶兔钍骄幊陶Z言的特性。它擁有一個簡單的類似 C# 的語法和強(qiáng)大的元編程(meta-programming)系統(tǒng)。
          • Netjs:.NET 到 TypeScript 和 JavaScript 編譯器。兼容可移植類庫。你甚至可以使用 EXE 文件。
          • Roslyn:.NET 編譯平臺(“Roslyn”)提供開源的 C# 和 Visual Basic 編譯器,包含豐富的代碼分析 API。它可以使用和 Visual Studio 一樣的 API 來構(gòu)建代碼分析工具。
          • VisualFSharp:Visual F# 編譯器和工具。


          壓縮(Compression)

          • SharpCompress:SharpCompress 是一個用于 .NET、Mono、Silverlight、WP7 的壓縮類庫,可以解壓rar、7zip、zip、tar、bzip2 和 gzip,提供單向讀取和隨機(jī)文件訪問 API。支持對 zip/tar/bzip2/gzip 進(jìn)行寫入的實現(xiàn)。
          • DotNetZip.Semverd:一個開源項目,提供對 ZIP 文件處理的 .NET 類庫和相關(guān)工具。 (分支自 已經(jīng)不再維護(hù)的DotNetZip)DotNetZip.Semverd
          • SharpZipLib:一個 Zip、GZip、Tar 和 BZip2 的類庫,完全由 C# 編寫,面向 .NET 平臺。


          持續(xù)集成(Continuous Integration)

          • TeamCity:可以直接使用的,可擴(kuò)展、面向開發(fā)人員友好的構(gòu)建服務(wù)器——開箱即用。
          • CruiseControl.NET:一個自動化持續(xù)集成服務(wù)器,使用 .NET Framework 實現(xiàn)。
          • MyGet:為NuGet、NPM、Bower 和 VSIX 提供持續(xù)集成、部署、宿主程序包倉庫的服務(wù)。
          • AppVeyor:.NET 持續(xù)構(gòu)建和部署服務(wù)。


          加密(Cryptography)

          • BouncyCastle:和 .Net 的 System.Security.Cryptography 一起,在 CLR 上提供加密算法的實現(xiàn)。
          • HashLib:HashLib 包含了幾乎所有你見過的哈希算法,它幾乎支持所有東西并且非常容易使用。
          • libsodium-net:libsodium for .NET——一個安全加密庫。
          • StreamCryptor:使用 libsodium 和 protobuf 對流進(jìn)行加密和解密。


          數(shù)據(jù)庫(Database)

          • BrightstarDb:BrightstarDB 是一個原生的 .NET RDF 三元組數(shù)據(jù)庫(triple store)。
          • Event Store:開源的功能性數(shù)據(jù)庫,支持使用 JavaScript 進(jìn)行復(fù)雜事件處理。 https://geteventstore.com
          • LiteDB:一個 .NET 的 NoSQL 單文件文檔數(shù)據(jù)庫。
          • RavenDB:支持 linq 的 .NET 文檔數(shù)據(jù)庫。


          數(shù)據(jù)庫驅(qū)動(Database Drivers)

          • MySQL Connector:完全托管的 MySQL ADO.NET 數(shù)據(jù)庫提供程序、連接器。
          • Npgsql:Postgresql 的 .Net 數(shù)據(jù)提供程序。
          • MongoDB:MongoDB 官方 C# 驅(qū)動。
          • ServiceStack Redis:.NET 領(lǐng)先的 C# Redis 客戶端。
          • StackExchange Redis:來自 StackExchange 的通用 redis 客戶端。
          • Cassandra:DataStax 開發(fā)的 Apache Cassandra .NET 驅(qū)動程序。
          • Couchbase:couchbase 官方 .NET 客戶端庫,基于 Enyim memcached 客戶端。
          • Firebird.NET:由C# 編寫的 .NET 數(shù)據(jù)提供程序,提供對 Firebird API 的高性能原生實現(xiàn)。


          反編譯(Decompilation)

          • ILSpy:ILSpy 是一個開源的 .NET 程序集查看器和反編譯器。
          • JustDecompile Engine:JustDecompile 反編譯引擎。
          • de4dot:是一款強(qiáng)大的.NET程序集反混淆和脫殼工具(開源GPLv3)。


          部署(Deployment)

          • Unfold:基于 Powershell 的 .net web 應(yīng)用程序部署解決方案。


          DirectX

          • SlimDX:為 .NET 應(yīng)用程序提供的 DirectX 封裝。
          • SharpDX:SharpDX 是一個開源項目,為 .Net 及所有 Windows 平臺提供完整的 DirectX API,可以開發(fā)高性能的游戲、2D/3D圖形渲染以及實時音頻應(yīng)用程序。


          分布式計算(Distributed Computing)

          • Project Orleans:Orleans 框架提供了直接構(gòu)建分布式、大規(guī)模計算應(yīng)用的方法,無需學(xué)習(xí)和使用復(fù)雜的并行或擴(kuò)展模型。由微軟研究院開發(fā)。
          • Akka.net:Akka.NET 是流行的 Java/Scala 框架 Akka 的 .NET 版本。它由社區(qū)提供,與 Typesafe(原始的 Java、Scala 版本的開發(fā)商)無關(guān)。


          文檔(Documentation)

          • Sandcastle:Sandcastle 幫助文件生成器和 NDoc 類似。
          • SharpDox:一個 c# 文檔工具。
          • Swashbuckle:向 WebApi 項目無縫地添加 swagger 文檔(譯者注:swagger 是一套用于生成、描述、展現(xiàn) RESTful 風(fēng)格 web 服務(wù)文檔的框架和規(guī)范)。
          • NSwag:通過Swagger規(guī)范生成.NET、TypeScript的Web API客戶端。
          • F# Formatting:F# 和 C# 項目的文檔工具,文檔生成自 F# 腳本文件、Markdown 文檔、內(nèi)嵌 XML 或 Markdown評論。


          電子商務(wù)和支付(E-Commerce and Payments)

          • Paypal Merchant SDK:Paypal Merchant官方.NET SDK。
          • NopCommerce:nopCommerce。開源的電子商務(wù)購物車(ASP.NET MVC)。


          • ServiceStack.Stripe:針對 stripe.com REST API 的強(qiáng)類型 .NET 客戶端。


          • SmartStoreNET:免費 ASP.NET MVC 電子商務(wù)購物車解決方案。


          • Stripe.Net:Stripe.net 是針對 http://stripe.com 完整服務(wù)的 .net api。


          • BeYourMarket:BeYourMarket 是一個點對點的市場框架。


          • Virto Commerce:Virto Commerce 是第二個版本,也是唯一的開源許可下的企業(yè)級別電子商務(wù)產(chǎn)品。Virto Commerce 基于 .NET 4.5,使用了 MVC、IoC、EF、Azure、Angular JS 等其他先進(jìn)技術(shù)。它可以在微軟的云平臺(Azure)、亞馬遜云服務(wù)(AWS)和企業(yè)內(nèi)部部署。


          環(huán)境管理(Environment Management)

          • DNVM:.NET SDK 管理器,一組命令行工具,用于更新和配置需要使用的運行時環(huán)境(DNX)。


          ETL

          • Reactive ETL:Reactive ETL 使用 .NET 反應(yīng)性擴(kuò)展框架(reactive extensions) 重寫了 Rhino ETL。


          游戲(Game)

          • MonoGame:一個用來創(chuàng)建跨平臺游戲的強(qiáng)大框架。
          • CocosSharp:CocosSharp 是 Cocos2D 和 Cocos3D API 的 C# 實現(xiàn)版本,可以在所有支持 MonoGame 的平臺上運行。
          • Duality:Duality 是一個 2D 游戲開發(fā)框架。專注于功能的模塊化,自帶一個可視化編輯器。
          • Paradox:Paradox 游戲引擎。


          地理信息系統(tǒng)(Gis)

          • NetTopologySuite:一個 在 .NET 平臺上實現(xiàn)快速、可靠的 GIS 系統(tǒng)解決方案。
          • SharpMap:一個易于使用的地圖庫,可以用于 web 和桌面應(yīng)用程序。


          Git工具(Git Tools)

          • Bonobo Git Server:Bonobo Git Server for Windows 是一個 web 應(yīng)用程序,可以安裝在你自己的 IIS 上,用于管理和連接你的 git 倉庫。
          • GitExtensions:GitExtensions 包含資源管理器擴(kuò)展、Visual Studio 2008/2010/2012/2013 插件和一個獨立的 Git 倉庫工具。
          • GitLink:讓用戶可以單步調(diào)試托管在 GitHub 或 BitBucket 上的代碼。
          • GitVersion:根據(jù)你的 Git 倉庫的狀態(tài)生成一個語義化版本號(Semantic Version Number)。
          • LibGit2Sharp:LibGit2Sharp 帶來了 libgit2 所有的功能和速度,是一個本地 Git 實現(xiàn),可以運行在 .Net 和 Mono 平臺。
          • NGit:NGit 是 JGit 移植到 C# 的版本。
          • posh-git:Git 的 PowerShell 環(huán)境。


          圖形(Graphics)

          • Oxyplot:OxyPlot 是一個 .NET 跨平臺繪圖庫。
          • OpenTK:Open Toolkit 是一個封裝了 OpenGL、OpenCL 和 OpenAL 的 高級底層 C# 開發(fā)庫。
          • NGraphics:NGraphics 是一個 .NET 跨平臺矢量圖形渲染庫。


          GUI

          • MahApps.Metro:用于創(chuàng)建 Metro 風(fēng)格 WPF 應(yīng)用的工具箱。
          • Callisto:用于 Windows 8 XAML 應(yīng)用的控件工具箱。包含若干 UI 控件,讓你更容易地創(chuàng)建符合 Windows UI 風(fēng)格規(guī)范的Windows 商店應(yīng)用。
          • ObjectListView:ObjectListView 使用 C# 封裝了 .NET 的 ListView 控件。它使得 ListView 更加易用,并且加入了一些新特性。
          • DockPanelSuite:靈感來自 Visual Studio 的停靠窗口(docking)類庫,用于 .NET WinForm 應(yīng)用。
          • AvalonEdit:在 SharpDevelop 中使用,基于 WPF 的文本編輯器組件。
          • XWT:跨平臺 UI 工具箱,用于創(chuàng)建 .NET 和 Mono 桌面應(yīng)用程序。
          • Gtk#:Gtk# 是 Gtk+ GUI 工具箱的 Mono/.NET 版本,絕大多數(shù) Mono 中的 GUI 應(yīng)用都基于它構(gòu)建。
          • MaterialDesignInXamlToolkit:用于創(chuàng)建 Material Design 風(fēng)格 WPF 應(yīng)用的工具箱。
          • Eto.Forms:跨平臺的 GUI 框架,用于 .NET 和 Mono 下的桌面和移動應(yīng)用程序。
          • Dragablz:可拖拽、可分離(tearable,譯者注:即拖拽標(biāo)簽頁成為獨立窗口)的 WPF 標(biāo)簽頁控件(類似 Chrome)。支持布局和主題,包含兼容 MahApps 和 Material Design 的主題。
          • Fluent.Ribbon:Fluent Ribbon Control Suite 是一個在 WPF 中實現(xiàn) Office 和 Windows 8 風(fēng)格的 Ribbon 庫。


          HTML 和 CSS(HTML and CSS)

          • AngleSharp:支持構(gòu)建完整的 HTML5 DOM 和 CSS3 模型。
          • CsQuery:jQuery 風(fēng)格的HTML5 解析器,可與 DOM 交互。
          • dotless:ruby Less CSS 庫的 .NET 移植版本。
          • ExCSS:C# 的 CSS3 解析器開發(fā)庫。
          • FluentBootstrap:讓ASP.NET MVC 和 WebPages 更容易使用 Boostrap CSS 框架。
          • HtmlAgilityPack:一個靈活的 HTML 解析器,可以對 DOM 進(jìn)行讀寫,支持 XPATH 和 XSLT。
          • Jumony:類似HtmlAgilityPack框架,性能有改善。


          HTTP

          • Http.fs:[F#] 中的一個函數(shù)式 HTTP 客戶端。
          • RestSharp:.NET 下簡單的 REST 和 HTTP API 協(xié)議客戶端。
          • EasyHttp:C# Http開發(fā)庫。
          • Refit:Xamarin 和 .NET 下自動生成強(qiáng)類型的 REST 庫。
          • RestEase:類型安全且易于使用的 REST API 客戶端庫,簡單可定制。大部分靈感來自 Refit。


          IDE

          • SharpDevelop:用于 .NET 編程語言的免費 IDE。
          • MonoDevelop:MonoDevelop 是一個跨平臺的 IDE,主要面向 Mono/.NET 開發(fā)者。
          • Visual Studio Express:用于 .NET 開發(fā)的免費、輕量版本的 Visual Studio。
          • Visual Studio Community:功能完整的免費 IDE。
          • Waf DotNetPad:簡單快速的代碼編輯器,讓開發(fā) C# 或 Visual Basic 充滿樂趣。
          • Visual Studio Code:非常棒的編輯器,來自微軟,基于 GitHub Atom。


          • Rider:跨平臺.Net IDE。


          圖像處理(Image Processing)

          • ImageResizer:在圖片 URL 后面增加命令,在幾毫秒內(nèi)獲取修改后的版本,支持實時的對圖片進(jìn)行縮放、編輯。
          • ImageProcessor:開源 .NET 庫,用于實時處理圖片。
          • DynamicImage:高性能開源圖片處理庫,用于 ASP.NET。
          • MetadataExtractor:從圖片中提取 Exif、IPTC、XMP、ICC 等其它元數(shù)據(jù)信息。
          • Emgu CV:OpenCV 的 .NET 跨平臺封裝。


          安裝工具(Install Tools)

          • Wix Toolset:強(qiáng)大的工具集,用于創(chuàng)建你自己的 Windows 安裝程序。
          • Squirrel:Squirrel 即是一套工具也是一個類庫,可以無安全管理 Windows 桌面程序的安裝和更新。


          國際化(Internationalization)

          • i18n:ASP.NET MVC 智能國際化工具。


          互操作(Interoperability)

          • CefSharp:Chromium Embedded Framework 的 .NET 支持(WPF 和 WinForm)。
          • CppSharp:在 C# 中平滑使用 C++ API 的工具。
          • Sharpen:Sharpen 是 db4o 編寫的 Eclipse 插件,可以讓你把 Java 項目轉(zhuǎn)換為 C#。
          • CXXI:C++ 互操作框架。


          IoC

          • Castle Windsor:Castle Windsor 是一個用于 .NET 和 Silverlight 的成熟的 控制反轉(zhuǎn)(IoC) 容器。
          • Unity:輕量級、可擴(kuò)展的依賴注入容器,支持構(gòu)造函數(shù)、屬性和方法調(diào)用注入。
          • Autofac:令人著迷的 .NET IoC 容器。
          • Ninject:.net 依賴注入的忍者。
          • StructureMap:.Net 最早的 IoC/ID 容器。
          • Spring.Net:Spring.NET 是一個開源應(yīng)用程序框架,可以便捷地創(chuàng)建企業(yè)級 .NET 應(yīng)用。
          • LightInject:一個超輕量級 IoC 容器。
          • TinyIoC:單文件、簡單、跨平臺的 IoC 容器。


          日志(Logging)

          • Essential Diagnostics:為內(nèi)置System.Diagnostics 命名空間擴(kuò)展功能,提供更靈活的日志功能。
          • NLog:先進(jìn)的 .NET 和 Silverlight 日志工具。
          • ELMAH:ELMAH 官方網(wǎng)站。
          • Elmah MVC:MVC 版 Elmah。
          • Logary:Logary 是一個 mono 和 .Net 平臺下高性能、多目標(biāo)的日志、度量、追蹤和健康檢查庫。支持多目標(biāo),為微服務(wù)構(gòu)建。
          • Log4Net:Apache log4net 工具庫能夠幫助程序員向多種不同的目標(biāo)輸出日志語句。
          • Serilog:一個 NoSQL 時代下簡單直接的日志庫。將多個優(yōu)秀的傳統(tǒng)結(jié)構(gòu)化分析日志功能合并到一個易于使用的程序集中。
          • StackExchange.Exceptional:Stack Exchange 網(wǎng)絡(luò)使用的錯誤處理程序。
          • Semantic Logging Application Block (SLAB):為內(nèi)置
          • System.Diagnostics.Tracing 命名空間(EventSource類)擴(kuò)展功能,支持將日志記錄到多個容器中,包括 Azure 表存儲、數(shù)據(jù)庫、文件(JSON、XML、文本文件)。通過 ETW 支持進(jìn)程內(nèi)和進(jìn)程外的日志記錄,支持 Rx 進(jìn)行實時的事件過濾和聚合。
          • Exceptionless:一個免費開源分布式系統(tǒng)的日志收集框架,它可以應(yīng)用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技術(shù)棧的應(yīng)用程序中,并且提供了Rest接口可以應(yīng)用在 Javascript,Node.js 中。


          機(jī)器學(xué)習(xí)和數(shù)據(jù)科學(xué)(Machine Learning and Data Science)

          • Accord.NET:機(jī)器學(xué)習(xí)框架,包含了音頻和圖像處理的庫(計算機(jī)視覺、計算機(jī)聽覺、信號處理和統(tǒng)計)。
          • Accord.NET Extensions:高級圖像處理和計算機(jī)視覺算法擴(kuò)展。
          • AForge.NET:為計算機(jī)視覺和人工智能領(lǐng)域的開發(fā)者和研究人員提供的框架(包括圖像處理、神經(jīng)網(wǎng)絡(luò)、遺傳算法、機(jī)器學(xué)習(xí)、機(jī)器人科學(xué))。
          • Deedle:處理探索性數(shù)據(jù)的數(shù)據(jù)幀和時序庫,支持 C# 和 F#。
          • FsLab:數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)庫的集合,支持 F# 和 .NET。
          • numl:包含最流行的監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)算法,盡量減少創(chuàng)建預(yù)測模型時的沖突。
          • R Provider:將 R 語言包和函數(shù)封裝為類型安全的類型提供程序供 F# 調(diào)用。
          • F# Data:F# 類型提供程序,訪問 XML、JSON、CSV 和 HTML 文件(基于樣例文檔),以及 WorldBank 數(shù)據(jù)。


          Markdown 處理(Markdown Processors)

          • MarkdownSharp:C# 實現(xiàn)的開源 Markdown 處理器,在 Stack Overflow 中使用。
          • F# Formatting:用于生成 F# 和 C# 項目文檔的工具。該工具庫的核心組件中包含了可擴(kuò)展的 Markdown 解析器。
          • CommonMark.NET:CommonMark 規(guī)范的 C# 實現(xiàn),用于將 Markdown 文檔轉(zhuǎn)換為 HTML。為最佳性能和可移植性進(jìn)行了優(yōu)化。


          郵件(Mail)

          • FluentEmail:System.Net.Mail 的一個流式(Fluent)封裝,支持 razor 模板引擎。
          • MailKit:完整的跨平臺的郵件協(xié)議棧,包括 IMAP、POP3、SMTP,支持驗證等特性。基于 MimeKit 構(gòu)建。
          • MimeKit:跨平臺 .NET MIME 創(chuàng)建和解析庫,支持 S/MIME、PGP、TNEF 和 Unix mbox spools。
          • PreMailer.Net:一個 C# 開發(fā)庫,將你的樣式表嵌入到內(nèi)置的 style 屬性中,最大限度支持郵件客戶端。


          數(shù)學(xué)(Mathematics)

          • MathNet:Math.NET 是一個開源項目,旨在創(chuàng)建和維護(hù)涵蓋基礎(chǔ)數(shù)學(xué)在內(nèi)的工具集,面向高級和日常需要使用此類功能的 .Net 開發(fā)人員。


          多媒體(Media)

          • TagLib#:TagLib#(即 taglib-sharp)是一個讀寫媒體文件元數(shù)據(jù)的庫,支持視頻、音頻和照片格式。


          度量(Metrics)

          • C# StatsD Client:Etsy StatsD 服務(wù)器的 C# 客戶端。
          • App Metrics:開源跨平臺 .NET 報表度量開發(fā)庫。


          微框架(Micro Framework)

          • .NET Micro Framework Interpreter:Microsoft? .NET Micro Framework(NETMF)是一個在 Visual Studio 中提供為小型設(shè)備上編寫嵌入式應(yīng)用的框架。


          雜項(Misc)

          • .NET Fiddle:在瀏覽器中編寫、編譯并運行 C# 代碼。相當(dāng)于 C# 版本的 JSFiddle。
          • AzureCrawler:從 Angular、Ember、Durandal 或任何 JavaScript 應(yīng)用中獲取 HTML 快照。
          • BitSharp:C# 比特幣節(jié)點。
          • CSScript:CS-Script 是一個基于 CLR 的腳本系統(tǒng),使用 C# 作為編程語言。CS-Script 目前針對微軟的 CLR 實現(xiàn)(.NET 2.0/3.0/3.5/4.0/4.5)并完整支持 Mono。附帶很多附加特性,比如腳本宿主。


          • CsvHelper:幫助讀寫 CSV 文件的開發(fā)庫。


          • FluentValidation:一個小型的 .NET 校驗庫,使用流式接口和 lambda 表達(dá)式構(gòu)建校驗規(guī)則。
          • Humanizer:Humanizer 能夠在 .NET 平臺上滿足所有針對字符串、枚舉、日期、時間、時間范圍、數(shù)字等類型數(shù)據(jù)的操作和顯示要求。
          • LINQPad:一個 C#/VB/F# 的便簽本,能夠立即執(zhí)行任何表達(dá)式、語句塊或程序,帶有富文本顯示等有用的特性。同樣可以讓你使用 LINQ 進(jìn)行交互性數(shù)據(jù)庫查詢。 [$](譯者注:也有免費許可,但是功能受限)。
          • Polly:快捷便利的異常處理策略,例如 重試、始終重試、等待并重試或斷路(Circuit Break)等行為。 (.NET 3.5、4.0、4.5、PCL、Xamarin)
          • Rant:Rant 程序文本生成 DSL(領(lǐng)域特定語言)。


          • ScriptCS:使用文本編輯器、nuget 和強(qiáng)大的 Roslyn 來編寫 C# 應(yīng)用!
          • EntityFramework-Plus:Entity Framework 擴(kuò)展,提供工具類、Bulk 操作、批處理/批量更新、查詢緩存/過濾器/Future、審計等功能。


          MVVM

          • Caliburn.Micro:小型但功能強(qiáng)大的框架,可以用來給所有 XAML 平臺創(chuàng)建應(yīng)用。它對 MV* 模式的強(qiáng)大支持可以讓你快速構(gòu)建你的解決方案,與此同時不必犧牲代碼質(zhì)量和可測試能力。
          • MVVM Light Toolkit:該工具箱主要是用來加速創(chuàng)建和開發(fā) MVVM 應(yīng)用,適用于 WPF、Silverlight、Windows Store(RT)和 Windows Phone 平臺。
          • Catel:Catel 是一個應(yīng)用開發(fā)平臺,主要著眼在 MVVM(WPF、Silverlight、Windows Phone 及 WinRT)以及 MVC(ASP.NET MVC)。Catel 的核心部分包含 IoC 容器、模型、校驗、備忘錄模式(memento)、消息中介(message mediator)、參數(shù)檢查等。
          • UpdateControls:Update Controls 不需要你實現(xiàn) INotifyPropertyChanged 接口或聲明一個 DependencyProperty。可以將控件直接關(guān)聯(lián)到 CLR 屬性,這使得它完美貼合 MVVM 模式。
          • ReactiveUI:一個 .NET 下的 MVVM 框架,集成了反應(yīng)性擴(kuò)展框架(Rx),允許開發(fā)者使用 WPF、Windows Store Apps、WP8 或 Xamarin 創(chuàng)建優(yōu)雅的、可測試的應(yīng)用。
          • Okra App Framework:一個以 app 為中心的 Windows 8.1 MVVM 框架,融合依賴注入,包含一套完整的 Visual Studio MVVM 模板。
          • WPF Application Framework (WAF):一個輕量級的框架,能夠幫助你創(chuàng)建結(jié)構(gòu)優(yōu)雅的 WPF 應(yīng)用。支持你使用分層架構(gòu)和 MVVM 模式。
          • MVVMCross:跨平臺mvvm 移動開發(fā)框架,針對 WP7 和 WP8 的 WPF/Silverlight、Android 的 Mono、iOS 的 MonoTouch 以及 WPA8.1/Windows 8.1 商店應(yīng)用的 Windows Universal 項目。它使用可移植類庫(PCL)來支持可維護(hù)的跨平臺 C# 原生應(yīng)用。
          • Stylet:最小化 MVVM 框架(參考 Caliburn Micro),包含了良好的文檔、高覆蓋率的測試以及自帶的 IoC 容器。
          • Gemini:類似 Visual Studio Shell 的 IDE 框架。基于 WPF、AvalonDock 和 Caliburn Micro 構(gòu)建。


          Office

          • ClosedXML:ClosedXML 能夠讓開發(fā)人員更便捷地創(chuàng)建 Excel 2007、2010 文件。
          • NPOI:該項目是 .NET 版本的 POI 項目,原始的 Java 版本位于http://poi.apache.org/ 。
          • EPPlus:EPPlus 是一個 .net 類庫,用于讀寫 Open Office Xml 格式的 Excel 2007、2010 文件(xlsx)。
          • Open XML SDK:Open XML SDK 是一個開源庫,用于處理 Open XML 文檔(包括 DOCX、XLSX 和 PPTX)。


          ORM

          • Entity Framework:對象關(guān)系映射器(ORM)框架,讓 .NET 開發(fā)人員使用領(lǐng)域特定的對象來處理關(guān)系型數(shù)據(jù)。
          • BL Toolkit:.NET 平臺的業(yè)務(wù)邏輯工具箱。
          • Dapper:一個超小型、快捷輕便的 ORM 框架。
          • Dapper Extensions:小型類庫,對 Dapper 的功能進(jìn)行補(bǔ)充,為你的簡單傳統(tǒng) CLR 對象提供基礎(chǔ)的 CRUD(Get、Insert、Update、Delete) 操作。
          • NHibernate:NHibernate 對象關(guān)系映射器(移植自 Java 平臺的 Hibernate)。
          • Fluent NHibernate:便捷、無需使用 XML、編譯安全、自動化、基于約定命名的 NHibernate 映射庫。
          • FluentMigrator:.net 下的便捷的遷移框架。
          • ServiceStack.OrmLite:輕量、簡單、快速、基于命名約定的 POCO ORM。


          • Massive:小型、令人愉悅的數(shù)據(jù)訪問工具,始終關(guān)愛你直到永遠(yuǎn)。


          • LINQ to DB:最快的 LINQ 數(shù)據(jù)庫訪問庫,簡單、輕量、快速、類型安全,在你的對象(POCO)和數(shù)據(jù)庫之間搭建橋梁。


          包管理(Package Management)

          • NuGet:.NET 包管理器。
          • MyGet:為 NuGet、NPM、Bower 和 VSIX 提供程序包倉庫宿主,同樣提供 CI 服務(wù)。
          • Paket:.NET 的一個包依賴管理器,支持 NuGet 包和 GitHub 倉庫。


          PDF

          • ITextSharp:iText 是一個PDF庫,用于創(chuàng)建、修改、檢查和維護(hù) Portable Document Format(PDF)格式的文檔 [$] 開源軟件免費


          Profiler

          • MiniProfiler:一個簡單但有效的小型 profiler,用于 ASP.NET 網(wǎng)站。
          • Glimpse:開源 web 診斷平臺。


          推送通知(Push Notifications)

          • PushSharp:服務(wù)器端的推送通知類庫,支持 iOS、OSX、Android、Chrome、Windows Phone、Windows 8、Backberry 和 Amazon 設(shè)備。


          隊列(Queue)

          • NServiceBus:.NET 平臺下最流行的服務(wù)總線。
          • RabbitMQ.NET:AMQP 客戶端的 C# 實現(xiàn),通過 WCF 綁定到已有的 AMQP 服務(wù)。
          • NetMQ:NetMQ 是 ZeroMQ 純 C# 移植版本。
          • MassTransit:MassTransit 是一個精簡服務(wù)總線(lean service bus)的實現(xiàn),使用 .NET Framework 來構(gòu)建松耦合應(yīng)用程序。
          • Rebus:Rebus 是一個 .NET 平臺的精簡服務(wù)總線和 NServiceBus、MassTransit類似,只不過更加精簡。
          • EasyNetQ:易于使用的 RabbitMQ .NET API。
          • Warewolf ESB:易于使用的服務(wù)總線和微服務(wù)平臺,可以在一個可視化 IDE 中便捷的創(chuàng)建應(yīng)用和服務(wù)。
          • CAP:用于處理分布式事務(wù)的 .Net 標(biāo)準(zhǔn)開發(fā)庫。支持 EventBus,輕量級、高效且易于使用。


          響應(yīng)式編程(Reactive Programming)

          • Rx.NET:Reactive Extensions (Rx)庫使用觀察者序列(observable sequences)和 LINQ 風(fēng)格的查詢操作,來進(jìn)行異步和基于事件的程序開發(fā)。
          • Dynamic Data:用于集合的響應(yīng)式編程框架。


          計劃調(diào)度(Scheduling)

          • QuartzNet:Quartz 是 .NET 平臺的企業(yè)級調(diào)度器。
          • Hangfire:在 ASP.NET 應(yīng)用中,超簡單地實現(xiàn)自主引導(dǎo)(fire-and-forget)、延遲和周期重復(fù)任務(wù)。高級版需要收費。
          • Hangfire.Redis.StackExchange:Hangfire的redis擴(kuò)展庫,基于StackExchange.Redis的開源實現(xiàn)。
          • Azure WebJobs:Azure WebJobs 是Azure中App Services一個附屬服務(wù),為Azure中運行的Web App提供后臺運行環(huán)境(支持多種語言編寫Job),有.NET的SDK開源,并且可以直接添加擴(kuò)展也開源。


          SDK 和 API 客戶端(SDK and API Clients)

          • AWS SDK:AWS SDK for .NET 讓 .NET 開發(fā)者可以便捷地操作 Amazon Web Services。
          • Azure PowerShell:一組 PowerShell 命令行,讓開發(fā)者和管理員開發(fā)、部署和管理 Microsoft Azure 應(yīng)用。
          • Octokit.NET:.NET 平臺下的 GitHub API 客戶端庫。
          • DropNet:Dropbox API 客戶端開發(fā)庫。


          搜索(Search)

          • Elasticsearch .NET:Elasticsearch.Net & NEST。
          • PlainElastic.Net:ElasticSearch 的一個簡單的 .Net 客戶端。
          • SolrNet:.Net 平臺下的 Solr 客戶端。
          • Lucene.net:Lucene.Net 是 Lucene 搜索引擎庫的移植,使用 C# 編寫,面向 .NET 環(huán)境的用戶。


          序列化(Serialization)

          • Protobuf.NET:Protocol buffers 是 Google 使用的二進(jìn)制序列化格式,在 Google 數(shù)據(jù)通訊中大量使用。
          • Json.NET:.NET 平臺下流行的、高性能 JSON 框架。
          • ServiceStack.Text:在 servicestack.net 中使用的 JSON、JSV、CSV 文本序列化器。
          • Msgpack-Cli:MessagePack 的 CLI 實現(xiàn)。
          • Jil:.NET 平臺下快速的 JSON 序列化器,基于 Sigil (在 StackOverflow 中使用)。
          • ProtoBuf:根據(jù) .proto 規(guī)范,為 protocol buffer 序列化內(nèi)容生成 C# 代碼。
          • F# Data:F# 類型提供程序,訪問 XML、JSON、CSV 和 HTML 文件(基于樣例文檔),以及訪問 WorldBank 數(shù)據(jù)。
          • Bond:跨平臺框架,用于處理系統(tǒng)化(schematized)數(shù)據(jù)。支持跨平臺的序列化、反序列化,以及強(qiáng)大的通用機(jī)制來高效處理數(shù)據(jù)。


          狀態(tài)機(jī)(State machines)

          • Stateless:直接使用 .NET 代碼創(chuàng)建一個狀態(tài)機(jī)和輕量的基于狀態(tài)機(jī)的工作流。
          • Automatonymous:.Net 平臺的狀態(tài)機(jī)庫,允許你編寫流式API風(fēng)格的狀態(tài)機(jī)。

          靜態(tài)網(wǎng)站生成(Static Site Generators)

          • Pretzel:.NET 平臺下的網(wǎng)站生成工具(包含后續(xù)的一些功能)。
          • Sandra.Snow:.NET 平臺的靜態(tài)網(wǎng)站生成工具,借鑒 Jekyll。
          • Wyam:簡單易用、高度模塊化、擁有強(qiáng)大配置能力的靜態(tài)網(wǎng)站生成工具。


          風(fēng)格指南(Style Guide)

          • C# Style Guide:StackOverflow 上的C#風(fēng)格指南 Q & A。
          • C# Coding Conventions:MSDN 官方的 C# 代碼約定。


          模板引擎(Template Engine)

          • RazorEngine:基于微軟 Razor 解析器引擎的開源模板引擎。
          • Nustache:無邏輯模板的開源庫。
          • DotLiquid:Ruby Liquid 模板語言的 C# 移植版本。


          測試(Testing)

          • AutoFixture:AutoFixture 是一個用于 .NET 的開源框架,用于簡化單元測試中的設(shè)置(Arrange)階段。
          • FakeItEasy:.NET 平臺的一個簡單的 mocking 庫。
          • Fluent Assertions:一組 .NET 擴(kuò)展方法,可以讓你更自然地指定 TDD 或 BDD 風(fēng)格測試的期望值。
          • Fuchu:F# 的單元測試庫,通過 tests-as-values 機(jī)制讓你更容易創(chuàng)建領(lǐng)域特定語言(DSL)。
          • Machine.Specifications:Machine.Specifications (MSpec)是一個上下文、規(guī)范框架,忽略了語言本身的干擾,簡化了測試。
          • Moq:.NET 平臺下最流行和友好的 mocking 框架。
          • NBuilder:快速創(chuàng)建測試對象。
          • NSubstitute:一個友好的 .NET mocking 框架。
          • NUnit
          • Rhino Mocks:.NET 平臺的動態(tài) Mocking 框架。
          • Shouldly:Shouldly 是一個斷言(assertion)框架,主要功能是在斷言失敗時,給出簡單明了并且友好的錯誤信息。
          • SpecFlow:將業(yè)務(wù)需求綁定到 .Net 代碼。
          • xUnit:xUnit.net 是一個 .NET 平臺下免費、開源、專注社區(qū)的單元測試框架。
          • BenchmarkDotNet:功能強(qiáng)大的基礎(chǔ)測試 .NET 開發(fā)庫。


          交易(Trading)

          • Lean:Lean 引擎是一個開源的,完全由 C# 托管代碼編寫的交易算法引擎,用于桌面和云端。
          • StockSharp:交易和算法交易(algorithmic trading)的開源平臺(用于股票市場、外匯市場、比特幣和期權(quán)交易)。


          Visual Studio 插件(Visual Studio Plugins)

          • Web Essentials:Web Essentials 為 Visual Stduio 擴(kuò)展了大量的特性,提供了 web 開發(fā)人員盼望多年的功能。
          • VsVIM:Visual Studio 中的 VIM。
          • Nuget Package Manager:NuGet 是微軟開發(fā)平臺(包括 .NET)的包管理器。
          • SideWaffle:Visual Studio 2012、2013 中的一組項目模板集合,讓 web 開發(fā)人員更加輕松。


          • Resharper:Visual Studio 開發(fā)人員生產(chǎn)力工具 。


          • Refactoring Essentials:開源 C# 和 VB.NET 重構(gòu)擴(kuò)展,包括代碼最佳實踐分析器。


          • CodeContracts:.NET CodeContracts 工具源代碼。


          • Git Diff Margin:在 Visual Studio 滾動條區(qū)域?qū)崟r顯示當(dāng)前文件在 Git 上的差異。


          • Productivity Power Tools:一組 Visual Studio 專業(yè)版(及更高版本)的擴(kuò)展,用于提高開發(fā)人員的生產(chǎn)力。


          Web 框架(Web Frameworks)

          • ASP.NET MVC:ASP.NET 是一個免費的 web 框架,用于創(chuàng)建優(yōu)秀的 web 站點和應(yīng)用程序。
          • FubuMVC:.NET 平臺下前端控制器(front-controller)風(fēng)格的 MVC 框架。


          • NancyFx:在 .Net 和 Mono 平臺上創(chuàng)建 HTTP 服務(wù)的一個輕量級、非正式的框架。


          • IISNode:在 IIS 中宿主 NodeJS 應(yīng)用程序。
          • Suave.IO:一個框架/庫/web 服務(wù)器,當(dāng)你看到你使用優(yōu)美的 F# 編寫的代碼提前完成了你的項目時,它的存在會讓你喜極而泣。(一個用 F# 編寫 Web 應(yīng)用的框架和服務(wù)器端)


          Web 服務(wù)器(Web Servers)

          • EmbedIO:基于 Mono 編寫的跨平臺的 Web 服務(wù)器。
          • XSP:Mono 中的 ASP.NET 宿主服務(wù)器。該模塊包含了 Apache 模塊、FastCGI 模塊,可以用于掛載到其它 web 服務(wù)器或是作為一個測試用的獨立服務(wù)器存在(類似微軟的 Cassini 項目)。
          • Jexus:強(qiáng)勁、堅固、免費、易用的Linux ASP.NET服務(wù)器。


          WebSocket

          • SignalR:ASP.NET 庫,開發(fā)者可以通過它在 web 應(yīng)用程序中非常簡單地實現(xiàn)實時功能。
          • Fleck:Fleck 是一個 C# 實現(xiàn)的 WebSocket 服務(wù)器。分支自 Nugget 項目。
          • Websocket-Sharp:WebSocket 協(xié)議的 C# 實現(xiàn),包含客戶端和服務(wù)器端。
          • XSockets:提供了一組工具,可以在微軟 .NET 等平臺上構(gòu)建一個實時應(yīng)用程序。
          • WebSocket4NET:.NET 2.0+、Xamarin、Mono、Silverlight、Windows Phone 以及 WinRT 下的 WebSocket 客戶端。
          • SuperSocket:一個輕量級, 跨平臺而且可擴(kuò)展的 .Net/Mono Socket 服務(wù)器程序框架。


          Windows 服務(wù)(Windows Services)

          • TopShelf:一個簡單的服務(wù)宿主框架,使用 .NET 構(gòu)建 Windows 服務(wù)。


          通訊框架(Communication Frameworks)

          • DotNetty:一個快速開發(fā)高性能、高可靠性的非阻塞的事件驅(qū)動網(wǎng)絡(luò)應(yīng)用框架。
          • Helios:一套高性能的Socket通信中間件。


          • enode: 一個用來開發(fā)DDD、CQRS、EDA 以及事件驅(qū)動應(yīng)用程序的框架。


          其他列表(Other Lists)

          • .NET-libraries-that-make-your-life-easier:開源的 .NET 庫,讓你的生活更加輕松。
          • awesome-LINQ:一組精心挑選的超棒的 LINQ 類庫、工具等。


          看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人!!!歡迎大家點贊,留言討論,喜歡這篇文章可以分享給更多人,關(guān)注我每天更新分享有關(guān)程序員、科技、編程之類的文章!!!愛你們,,么么噠,,讓我們一起愉快的玩耍把!!!

          、深淺拷貝的區(qū)別有哪些?

          要說 js 的深淺拷貝,就不得不提 js 的兩大數(shù)據(jù)類型:基本數(shù)據(jù)類型和引用類型。基本數(shù)據(jù)類型的變量名和值都存儲在棧中,對于引用類型的變量名存儲在棧中,而值存儲在堆中。由于存儲方式不同,所以導(dǎo)致了他們復(fù)制的時候方式不同。

          淺拷貝是創(chuàng)建一個新對象,這個對象有著原始對象屬性值的一份精準(zhǔn)拷貝。如果屬性是基本類型,拷貝的就是基本類型的值,如果是引用類型,拷貝的就是內(nèi)存地址,所以如果其中一個對象改變了這個地址,就會影響到另外一個對象。

          深拷貝是將一個對象從內(nèi)存中完整的拷貝一份出來,從內(nèi)存堆中存放一個新的對象。這是兩個對象,所以修改其中一個,另外一個不會受影響。

          深淺拷貝主要針對的是引用類型,簡單數(shù)據(jù)類型不受影響。

          相關(guān)筆試題

          var person = {
           name:"前端人",
           hobby:['學(xué)習(xí)','敲代碼','潛水']
          }
          function copy(source){
           var newObj = new Object()
           for(var i in source){
            if(source.hasOwnProperty(i)){
             newObj[i] = source[i]
             }
            }
           return newObj
          }
          var p1 = copy(person);
          p1.name = "Web Person"
          console.log(person.name)
          console.log(p1.name)
          p1.hobby = ["內(nèi)卷"]
          console.info(person.hobby)
          console.info(p1.hobby)
          /*運行結(jié)果:
          前端人
           Web Person
          ["學(xué)習(xí)", "敲代碼", "潛水"]
          ["內(nèi)卷"]
          */

          2、js 數(shù)據(jù)類型有哪些?

          js 數(shù)據(jù)類型一共有 8 種,分為兩大類:基本類型和引用類型。

          它們的數(shù)據(jù)類型分別為:

          基本類型:string、number、boolean、null、undefined、symbol、bigint

          引用類型:object

          相關(guān)面試題

          // 注意:其他類型與數(shù)值進(jìn)行相加時,其他類型的轉(zhuǎn)為 number 類型
          console.log( true+1 ) // 2
          console.log( undefined +1 ) // NaN
          
          console.log( null ) //object
          console.log( undefined ) // undefined

          3、延遲加載 js 的方式有哪些?有什么區(qū)別呢?

          共有 6 種方式,分別為:

          • async
          • defer
          • js 最后加載
          • 利用 setTimeout
          • 動態(tài)創(chuàng)建 DOM 的方式
          • 使用 jQuery 的 getScript 方法

          它們的區(qū)別介紹:

          1、async:為 <script>標(biāo)簽定義了 async 屬性。async 和 html 解析是同步的,不是順次執(zhí)行 js 腳本,誰先加載完成先執(zhí)行誰。

          <script  async type="text/javascript" src="demo1.js" ></script>
          <script  async type="text/javascript" src="demo2.js" ></script>

          2、defer 會等到 html 解析完成之后再執(zhí)行 js 代碼,如果有多個腳本時,會按照順序依次執(zhí)行腳本。

          <script  defer type="text/javascript" src="demo1.js" ></script>

          3、js 最后加載

          把 js 外部引入的文件放置在頁面的底部,讓 js 最后加載,從而加快頁面加載速度。

          4、利用 setTimeout

          5、動態(tài)創(chuàng)建 DOM 的方式

          var element = document.createElement("script");  
          element.src = "box.js";  
          document.body.appendChild(element);

          這種方式通過操作動態(tài)加載 js 文件,不觸發(fā)的時候不加載,減少頁面文件大小,加快加載速度。

          6、使用 jQuery 的 getScript 方法

          $.getScript( "box.js",function(){//回調(diào)函數(shù),成功獲取文件后執(zhí)行的函數(shù)  
                console.log("腳本加載完成")  
          });

          相關(guān)面試題:

          <!doctype html>
          <html>
           <head>
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <script type="text/javascript" src="box.js"></script>
           </head>
           <body>
            <div id="box"></div>
           </body>
          </html>
          
          //box.js 代碼如下
          console.log( document.getElementById('box') )  // null

          box.js 想正常獲取元素 box ,并進(jìn)行一系列操作應(yīng)該如何延遲加載 js 文件呢?

          4、你對作用域的認(rèn)識有多少?

          作用域通俗地講,就是指一個變量的作用范圍。分為全局作用域和函數(shù)作用域。

          全局作用域

          • 頁面打開時被創(chuàng)建,頁面關(guān)閉時被銷毀。
          • 編寫在 script 標(biāo)簽下的變量和函數(shù),作用域為全局,頁面的任意位置都可以訪問
          • 有全局對象 window ,代表瀏覽器窗口,全局作用下的變量和函數(shù)作為 window 的屬性和方法

          函數(shù)作用域(局部)

          • 函數(shù)是被調(diào)用時創(chuàng)建的,執(zhí)行完畢之后銷毀。
          • 函數(shù)每調(diào)用一次,變量和函數(shù)就會重新創(chuàng)建一次,它們之間是相互獨立的
          • 在函數(shù)作用域內(nèi)可以訪問到全局變量或函數(shù),但是在函數(shù)外無法訪問函數(shù)作用域內(nèi)的變量
          • 函數(shù)作用域內(nèi)訪問變量,會在自身作用域內(nèi)尋找,若沒有則會向上一級作用域內(nèi)查找,一直到全局作用域。

          函數(shù)在被調(diào)用的時候會先進(jìn)行預(yù)編譯:

          全局作用域預(yù)編譯:

          • 創(chuàng)建上下文 GO 對象。
          • 找變量聲明,將變量名作為 GO 對象的屬性名,值為 undefined
          • 找函數(shù)式聲明,將值賦予函數(shù)體

          函數(shù)作用域預(yù)編譯:

          • 創(chuàng)建上下文 AO 對象
          • 將形參和實參作為 AO 對象的屬性,賦值為 undefined
          • 實參和形參相統(tǒng)一
          • 在函數(shù)體內(nèi)找函數(shù)聲明,將值賦予函數(shù)體。

          相關(guān)面試題:

          <script type="text/javascript">
           function fn(a,c){
            console.log(a)
            var a = 12
            console.log(a)
            console.log(c)
            function a(){ }
            if(false){
             var d = 34
            }
            console.log(d)
            console.log(b)
            var b = function(){}
            console.log(b)
            function c(){}
            console.log(c)
           }
           fn(1,2)
          </script>
          // 運行結(jié)果:
          /*
          function a(){}
          12
          function c(){}
          undefined
          undefined
          function (){}
          function c(){}
          */

          5、null 和 undefined 的區(qū)別。

          null 和 undefined 兩個都表示無的值。

          作者設(shè)計 js 的時候,借鑒的 java 語言先設(shè)計的 null 。null 使用的時候會被隱式轉(zhuǎn)化成 0,不容易發(fā)現(xiàn)錯誤。

          console.log( number(null) ) //0

          undefined 是為了填補(bǔ) null 的坑。所以后來又新增了 undefined 。

          console.log( number(undefined) ) //NaN

          6、new 操作符具體做了什么?

          • 創(chuàng)建了一個空對象。
          • 將空對象的原型指向于構(gòu)造函數(shù)的原型。
          • 將空對象作為構(gòu)造函數(shù)的上下文。
          • 對構(gòu)造函數(shù)有返回值的處理判斷。

          實現(xiàn) new 操作符的方法:

          function create( fn,...args ){
           var obj={}
           Object.setPrototypeOf( obj,fn.prototype )
           var resault = fn.apply(obj,args)
           return (resault instanceof Object) ? result : obj
          }

          7、為什么會有閉包?它解決了什么問題?

          7.1、什么是閉包?

          閉包就是函數(shù)嵌套函數(shù),通過函數(shù)內(nèi)的函數(shù)訪問變量的規(guī)則,實現(xiàn)外部訪問函數(shù)內(nèi)的變量。

          7.2、閉包的特點:

          • 函數(shù)嵌套函數(shù)。
          • 函數(shù)內(nèi)部可以引用函數(shù)外部的參數(shù)和變量。
          • 參數(shù)和變量不會被垃圾回收機(jī)制回收。

          實例3:閉包解決問題

          var liArr = document.getElementsByTagName('li')
          for(var i=0;i<liArr.length;i++){
           (function(i){
            liArr[i].onclick = function(){
             console.log('點擊元素',liArr[i])
            }
           })(i) 
          }

          7.3、閉包優(yōu)點:

          • 保護(hù)變量安全,實現(xiàn)封裝,防止變量聲明沖突和全局污染。
          • 在內(nèi)存當(dāng)中維持一個變量,可以做緩存。
          • 匿名函數(shù)自執(zhí)行函數(shù)可以減少內(nèi)存消耗。

          防抖和節(jié)流就是閉包的經(jīng)典應(yīng)用。

          7.4、閉包缺點:

          • 變量會駐留在內(nèi)存中,造成內(nèi)存損耗問題。解決辦法:把閉包函數(shù)設(shè)置為 null 。
          • 內(nèi)存泄漏

          8、防抖和節(jié)流,你了解多少?

          8.1、什么是防抖函數(shù)?

          當(dāng)持續(xù)觸發(fā)事件,一定時間內(nèi)沒有再觸發(fā)事件,事件處理函數(shù)才會執(zhí)行一次,如果在設(shè)定的時間到來之前又觸發(fā)了事件,就會重新計時。

          防抖函數(shù)常見的實際應(yīng)用:使用 echart 的時候,瀏覽器 resize 時,需要重新繪制圖表大小,還有典型的輸入框搜索應(yīng)用。

          8.2、節(jié)流函數(shù)是什么?

          當(dāng)持續(xù)觸發(fā)事件的時候,保證一段時間內(nèi)只調(diào)用一次事件處理函數(shù),一段時間內(nèi),只允許做一件事情。

          防抖和節(jié)流主要是用來限制觸發(fā)頻率較高的事件,再不影響效果的前提條件下,降低事件觸發(fā)頻率,減小瀏覽器或服務(wù)器的壓力,提升用戶體驗效果。

          9、數(shù)組去重有幾種方法?

          方法1: new set()

          return Array.from(new Set(arr))
          // 或
          return [...new Set(arr)]

          方法2:使用兩次循環(huán)

          for(var i=0,len=arr.length;i<len;i++){
           for(var j=i+1,len=arr.length;j<len;j++){
            if( arr[i]===arr[j] ){
             arr.splice(i,1)
             j--;
             len--
            }
           }
          }
          return arr

          方法3:indexOf 實現(xiàn)

          let arr1 = []
          for(var i=0;i<arr.length;i++){
           if( arr1.indexOf(arr[i]) === -1 ){
            arr1.push(arr[i])
           }
          }
          return arr1

          方法4:includes 實現(xiàn)

          let arr1 = []
          for(var i=0;i<arr.length;i++){
           if( !arr1.includes(arr[i]) ){
            arr1.push(arr[i])
           }
          }
          return arr1

          方法5:filter 實現(xiàn)

          array.indexOf(item,start) start 表示開始檢索的位置。

          return arr.filter(( item, index )=>{
           return arr.indexOf( item, 0 ) == index
          })

          10、call、bind 和 apply 的區(qū)別

          三者都是改變函數(shù)執(zhí)行的上下文,即改變 this 指向。

          它們之間的區(qū)別為:

          • call 和 apply 會立即執(zhí)行,bind 返回的是一個函數(shù),需調(diào)用后執(zhí)行。
          • 第二參數(shù)是傳入要執(zhí)行的方法中的參數(shù),call 和 bind 是獨立傳遞參數(shù),apply 是以數(shù)組傳遞參數(shù)的

          使用場景:
          1、需要改變某個函數(shù)的this指向時
          2、當(dāng)參數(shù)較少時可以使用call,參數(shù)較多可以使用apply以數(shù)組的方式傳遞
          3、當(dāng)需要重復(fù)調(diào)用時,可以使用bind新定義一個方法

          11、js 判斷變量是不是數(shù)組,你能寫出幾種方法?

          方法1:isArray

          var arr = [1,2,3]
          console.log(Array.isArray(arr))    

          方法2:instanceof

          var arr = [1,2,3]
          console.log( arr instanceof Array )
          console.log( arr instanceof Object )

          該方法不夠嚴(yán)謹(jǐn)。

          方法3:prototype

          console.log( Object.prototype.toString.call(arr).indexOf('Array')>-1 )

          方法4:isPrototypeOf

          console.log( Array.prototype.isPrototypeOf( arr ) )

          方法5:constructor

          console.log(arr.constructor.toString().indexOf('Array')>-1 )

          12、slice 是干嘛的? splice 是否會改變原數(shù)組?

          slice 是用來截取字符串的,返回一個新數(shù)組,但不會影響原數(shù)組。

          使用語法:

          arr.slice( start , end )

          截取 arr 數(shù)組,從 start 開始到 end 結(jié)束,第二個參數(shù)是可選參數(shù),沒有時從 start 開始截取到結(jié)尾。

          如果 start 參數(shù)是負(fù)數(shù)時,就會從 arr.lengtn + start 開始截取到結(jié)束。

          var arr = ['a','b','c','d','e']
          console.log( arr.slice(-3) ) // ["c", "d", "e"]
          console.log(arr)  //["a", "b", "c", "d", "e"]

          splice 是一個更強(qiáng)大的方法,可以添加、刪除、替換數(shù)組元素,返回的是被刪除元素,它的操作會改變原數(shù)組。

          使用語法:

          splice( start, n, new )

          從 start 開始,刪除 n 個元素,然后把 new 添加到 start 元素之后。第三個參數(shù)為可選參數(shù)

          • n 為 0 且第三個參數(shù)不為空時,表示添加新元素到 start 之后。
          • n 不為 0 且第三個參數(shù)不為空時,表示把 start 之后的 n 個元素替換成 new 。
          • n 不為 0 且第三個參數(shù)為空時,表示刪除 start 后的 n 個元素。
          var arr = ['a','b','c','d','e']
          var ar = arr.splice( 1, 1 ,'f','g')
          console.log('ar',ar)    // ["b"]
          console.log('arr',arr) //  ["a", "f", "g", "c", "d", "e"]

          13、== 和 === 有什么不同?

          == 比較的是值,=== 除了比較值,還比較類型。

          console.log( [1,2]=='1,2'  )       // true
          console.log( [1,2] === '1,2'  )  //false

          valueOf 方法返回 Math 對象的原始值,通常由 javascript 在后臺自動調(diào)用,并不顯示的出現(xiàn)在代碼中。

          console.log([1,2].valueOf()) //[1,2]
          console.log('1,2'.valueOf()) //[1,2]
          // 所以
          console.log( [1,2]=='1,2'  )  // true

          不管是字符串和數(shù)字比較,還是布爾值和數(shù)字比較,都會使用 valueOf 隱式轉(zhuǎn)換。

          總結(jié):== 需要使用 valueOf() 進(jìn)行隱式轉(zhuǎn)換,所以性能差。 === 會避開一些不必要的麻煩。

          14、this 的指向

          大廠筆試題:

          var name = 'window name'
          var p1 = {
           name:'p1 name',
           showName:function(){
            console.info(this.name)
           }
          }
          var fn = p1.showName
          fn()
          p1.showName()
          var p2 = {
           name:'p2 name',
           showName:function(fun){
            fun()
           }
          }
          p2.showName(p1.showName)
          p2.showName = p1.showName
          p2.showName()
          /*
          運行結(jié)果:
          window name
           p1 name
           window name
           p2 name
          */

          這是一道關(guān)于 this 指向的面試題,接下來我們就說說 this 是如何指向的?

          this 對象是運行時基于函數(shù)的執(zhí)行環(huán)境綁定的:

          • 在全局函數(shù)中,this 等于 window 。
          • 函數(shù)上下文調(diào)用,嚴(yán)格模式下 this 為 undefined ,非嚴(yán)格模式下,this 指向 window 。
          • 當(dāng)函數(shù)被作為某個對象的方法被調(diào)用時,this 等于那個對象。如果使用 call apply 改變當(dāng)前 this 時,將會指向為傳遞過來的那個 this 。
          • 匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此 this 指向 window。
          • 構(gòu)造函數(shù)內(nèi)的 this 指向創(chuàng)建的實例對象。
          • dom 事件處理函數(shù),this 指向觸發(fā)該事件的元素。
          • setTimeout 和 setInterval 中的 this 指向全局變量 window

          15、js 中的繼承有哪些方式呢?

          第 1 種:原型鏈繼承

          function Parent(){
           this.name = "前端人"
          }
          Parent.prototype.showName = function(){
           console.log(this.name)
          }
          function Child(){}
           //原型鏈繼承   
          Child.prototype = new Parent()
          var p = new Child()
          console.dir(p.name) //前端人

          特點:

          • 實例的是子類的實例,也是父類的實例。
          • 父類新增原型方法和屬性,子類都能訪問到。
          • 簡單,方便實現(xiàn)

          第 2 種:借用構(gòu)造函數(shù)

          function Animal (name) {
           this.name = name || 'Animal';
           this.sleep = function(){
            console.log(this.name + '正在睡覺!');
           }
          }
          Animal.prototype.eat = function(food) {
           console.log(this.name + '正在吃:' + food);
          };
          function Cat(name){
           Animal.call(this);
           this.name = name || 'Tom';
          }
          // Test Code
          var cat = new Cat();
          console.log(cat.name);
          console.log(cat.sleep());
          console.log(cat instanceof Animal); // false
          console.log(cat instanceof Cat); // true

          特點:

          • 創(chuàng)建子類時,可以向父類傳遞參數(shù)。
          • 可以實現(xiàn)多繼承,call 多個父類對象。
          • 解決方法1中,子類實例共享父類引用屬性的問題。

          還有組合式繼承、ES6 的繼承 和 寄生組合繼承等等。每種繼承方式都有各自的特點和缺點。

          16、嚴(yán)格模式與非嚴(yán)格模式的區(qū)別,你了解多少?

          JavaScript 語言是一門弱類型語言,存在許多類型錯誤,因此 ES6 引入了嚴(yán)格模式概念。

          如果不加 ‘use strict’ 常規(guī)模式下就是屬于非嚴(yán)格模式。

          嚴(yán)格模式

          在 js 文件頂部添加 ‘use strict’ 就屬于嚴(yán)格模式,嚴(yán)格模式也可以指定在函數(shù)內(nèi)部。

          <script>
           'use strict'  
           //或者函數(shù)內(nèi)部
           (function(){
            'use strict'
           })()
          </script>

          嚴(yán)格模式,是為 js 定義來了一種不同的解析與執(zhí)行模型,在嚴(yán)格模式下,ECMAScipt 3 中一些不解和不確定的行為將得到處理,而且會對不安全的操作會拋出異常。‘use strict’ 會告訴瀏覽器引擎可以切換到嚴(yán)格模式執(zhí)行。

          嚴(yán)格模式與非嚴(yán)格模式區(qū)別

          嚴(yán)格模式

          非嚴(yán)格模式

          變量必須聲明才能賦值

          變量不進(jìn)行聲明,可直接賦值

          不能使用 delete 字符刪除變量或?qū)ο?/p>

          可以使用 delete 刪除

          函數(shù)參數(shù)變量名不允許重復(fù)

          變量名重復(fù),獲取最后最后那個值

          普通函數(shù)內(nèi)的 this 為 undefined

          普通函數(shù)內(nèi)的 this 為 window

          不允許使用八進(jìn)制

          允許任意進(jìn)制

          eval 和 arguments 當(dāng)做關(guān)鍵字,不能被賦值和用作變量名

          可以使用 eval 、arguments 作為變量名

          call、apply 傳入 null undefined 保持原樣不被轉(zhuǎn)為window

          默認(rèn)轉(zhuǎn)為 window 對象

          限制對調(diào)用棧的檢測能力,訪問 arguments.callee 會拋出異常

          arguments.callee 運行正常

          17、隱式轉(zhuǎn)化相關(guān)面試題

          console.log( '2'>10 ) //false
          console.log( '2'>'10' ) //true
          console.log( 'abc'>'b' ) //false
          console.log( 'abc'>'aab' ) //true
          console.log( undefined == null ) //true
          console.log( NaN == NaN )//false
          console.log( [] == 0 ) //true
          console.log( ![] == 0 ) //true
          console.log( [] == [] ) //false
          console.log( {} == {} ) //false
          console.log( {} == !{} ) //false

          18、事件循環(huán)機(jī)制相關(guān)面試題。

          阿里面試題1:

          <script type="text/javascript">
           var p =new Promise(resolve=>{
            console.log(4)
            resolve(5)
           })
           function f1(){
            console.log(1)
           }
           function f2(){
            setTimeout(()=>{
             console.log(2)
            },0)
            f1()
            console.log(3)
            p.then(res=>{
             console.log(res)
            })
           }
           f2()
          </script>
          // 運行結(jié)果 4 1 3 5 2
          // 如果已經(jīng)了解事件運行機(jī)制,就可以跳過該問題了

          事件循環(huán)機(jī)制,event-loop 。包含三部分:調(diào)用棧、消息隊列、微任務(wù)隊列。

          事件循環(huán)開始的時候,會從全局一行一行的執(zhí)行代碼,遇到函數(shù)調(diào)用的時候,就會壓入調(diào)用棧中,當(dāng)函數(shù)執(zhí)行完成之后,彈出調(diào)用棧。

          // 如:代碼會一行一行執(zhí)行,函數(shù)全部調(diào)用完成之后清空調(diào)用棧
          function f1(){
           console.log(1)
          }
          function f2(){
           f1()
           console.log(2)
          }
          f2()
          // 執(zhí)行結(jié)果 1 2

          如果遇到 fetch、setInterval、setTimeout 異步操作時,函數(shù)調(diào)用壓入調(diào)用棧時,異步執(zhí)行內(nèi)容會被加入消息隊列中,消息隊列中的內(nèi)容會等到調(diào)用棧清空之后才會執(zhí)行。

          // 如:
          function f1(){
           console.log(1)
          }
          function f2(){
           setTimeout(()=>{
            console.log(2)
           },0)
           f1()
           console.log(3)
          }
          f2()
          // 執(zhí)行結(jié)果 :1 3 2

          遇到 promise、async、await 異步操作時,執(zhí)行內(nèi)容會被加入微任務(wù)隊列中,會在調(diào)用棧清空之后立即執(zhí)行。

          調(diào)用棧加入的微任務(wù)隊列會立即執(zhí)行。

          如
          let p =new Promise(resolve=>{
           console.log('立即執(zhí)行')
           resolve(1) //在 then 調(diào)用中執(zhí)行
          })

          微任務(wù)隊列中內(nèi)容優(yōu)先執(zhí)行,所以比消息隊列中的內(nèi)容執(zhí)行得早。

          了解這些知識后,再試一下最前面的那道面試題,應(yīng)該就沒什么問題了。

          20、前端領(lǐng)域內(nèi),你比較擅長什么?

          這個問題就留給讀到最后,能夠堅持學(xué)習(xí)的人,問問我們自己有什么是我們擅長的?在哪塊領(lǐng)域是我們占據(jù)競爭優(yōu)勢的?

          .昨日回顧

          編號姓名性別學(xué)歷畢業(yè)院校
          1張三大專中國人民大學(xué)
          2李四
          3

          <table>

          <tr>

          <th>編號</th>

          <th>標(biāo)題</th>

          <th>發(fā)布日期</th>

          </tr>

          <tr>

          <td>1</td>

          <td>重蔚自留地</td>

          <td>2014-10-20</td>

          </tr>

          </table>

          如果使用表格來排版網(wǎng)頁,搜索引擎搜互的幾乎很低。

          DIV+CSS布局或排版網(wǎng)頁,層級一般為3層左右。

          HTML網(wǎng)頁是一個結(jié)構(gòu)化的文檔,是一按層次順序展示的一個文檔。

          <table>的子元素(標(biāo)記)是<tbody>,而不是<tr>

          <tr>是<tbody>的子元素

          2.表單

          1、表單的主要功能:就是用來搜索用戶信息。

          2、表單的工作原理

          用戶填寫有表單的網(wǎng)頁,單擊某個按鈕進(jìn)行提交;

          用戶填寫的表單數(shù)據(jù),將發(fā)到服務(wù)器;

          服務(wù)器上有專門的程序來對用戶提交的數(shù)據(jù)進(jìn)行驗證;

          如果有錯誤,服務(wù)器會返回給瀏覽器一個錯誤信息;

          如果沒有錯誤,PHP程序會將用戶提交的數(shù)據(jù)寫入數(shù)據(jù)庫,并返回一個成功的信息。

          補(bǔ)充:

          用戶輸入的信息是否正確,比如:郵箱地址、電話號碼、用戶名是否重名等

          這些信息都是由PHP后臺程序來做驗證。

          3<form>標(biāo)記:是一組標(biāo)記(多個標(biāo)記)

          <form name=“form1” action=“l(fā)ogin.php”>

          用戶名:<input type=“text” name=“username” size=“50” />

          密碼:<input type=“password” name=“password” size=“50” />

          <input type=“submit” name=“submit” value=“提交” />

          </form>

          注意:所有表單元素都必須放在<form>中,然后一起提交給服務(wù)器。

          <form>的常用屬性

          Name:指表單的名稱,這個名稱一般給JS或PHP來用。

          比如:要獲取“用戶名”框中輸入的信息,用JS獲取是:document.form1.username.value

          Action:設(shè)置表單數(shù)據(jù)的處理程序文件名;比如:login.php

          Method:表單數(shù)據(jù)的提交方式。有兩種方式:GET和POST

          默認(rèn)的提交方式:就是GET方式。

          GET方式:將表單中的數(shù)據(jù)(以“名稱/值”)形式,追加到表單處理程序(action指定)的末尾。

          缺點:提交少量信息、不太安全、只能提交簡單的數(shù)據(jù),一般可以提交100個字節(jié)內(nèi)的數(shù)據(jù)

          http://www.sina.com.cn/news.php?id=234

          POST方式:將表單數(shù)據(jù)直接發(fā)放ACTION指定的處理程序,并沒有在地址欄顯示。

          優(yōu)點:提交海量數(shù)據(jù)、相對比較安全、提交的數(shù)據(jù)類型多樣化

          Enctype:是指表單數(shù)據(jù)的編碼方式(加密方式)

          Application/x-www-form-urlencoded 普通的加密方式(默認(rèn))

          Multipart/form-data 只有上傳文件時使用。

          • 單行文本框:用戶名、地址、聯(lián)系方式、郵編等

          <input type=“text” name=“名稱” value=“默認(rèn)值” size=“多少個字符寬” maxlength=“最多可放多少個字符” />

          注意:如果要把表單元素排齊,請使用表格來排,排的順序是<form>標(biāo)記中嵌<table>,<td>中放每一個表單元素。

          2、單行密碼框:密碼框中的內(nèi)容是以“*”號顯示,是為了保證數(shù)據(jù)的安全

          <input type=“password” name=“名稱” size=“字符寬” maxlength=“最大字符數(shù)” />

          3、按鈕

          提交銨鈕:<input type=“submit” name=“submit” value=“提交按鈕” />

          重置按鈕(清空):<input type=“reset” name=“reset” value=“重新填寫” />

          圖片按鈕:<input type=“image” src=“圖片URL” value=“值” />

          注意:圖片按鈕默認(rèn)是提交表單

          普通按鈕:<input type=“button” name=“名稱” value=“按鈕文本” />

          <input type="button" value="普通按鈕" onclick="javascript:this.form.reset()" />

          注意:普通按鈕沒有任何功能,一般要結(jié)合JS來實現(xiàn)提交或重置。

          提示:如果哪一個表單項,不想讓它提交到服務(wù)器,請不要給它添加name屬性即可。

          4、單選按鈕:一組相互排斥的按鈕,也就是每一次只能選擇一個。

          <input type=“radio”name=“名稱” value=“值”checked=“checked />男

          注意:一組單選按鈕的name值是一樣的,最后只能提交選中的哪一個。

          5、復(fù)選框:一組復(fù)選框的名稱也是一樣的,在后臺獲取值時,將使用“數(shù)組”的形式來獲取。

          <input type=“checkbox”name=“名稱”value=“值”checked=“checked” />游戲

          注意:復(fù)選框可以同時選擇多個,也可以一個都不選。

          提示:數(shù)組是一個名字里,可以存放多個不同的值(了解)

          JS數(shù)組:Var hobby = [“游戲”,“美術(shù)”,“電腦”]

          6、下拉列表

          <select name=“edu”>

          <option value=“” selected=“selected”>請選擇……</option>

          <option value=“高中”>高中</option>

          <option value=“大專”>大專 </option>

          </select>

          7、文本區(qū)域

          <textarea name=“名稱”rows=“幾行高”cols=“多少個字符寬”></textarea>

          提示:如果要在<textarea>中插入圖片,實現(xiàn)圖文混排,這個標(biāo)記做不到。一般網(wǎng)站的效果都是通過“在線HTML代碼編回器”實現(xiàn)的。比如:FCKEdit(就業(yè)班講)

          8、上傳文件

          <input type=“file”name=“uploadFile” />

          注意:value屬性是只讀屬性,是為了保證網(wǎng)站的安全。

          GET方式上傳不了文件,

          只有POST能上傳文件,并且編碼類型設(shè)置為:mulitpar/form-data

          3.框架

          1、框架的概念:將一個瀏覽器窗口劃分若干個區(qū)域,每個區(qū)域都是一個獨立的小窗口,小窗口中存放一個網(wǎng)頁文件。

          框架相當(dāng)于一個窗戶。一個窗戶由窗格和玻璃構(gòu)成。一個框架是由框架集(Frameset)和框架頁(Frame)構(gòu)成。

          <frameset>中定義框架的結(jié)構(gòu)(上下型、左右型)、大小、位置等。

          <frame>中定義小窗口是否顯示滾動條小窗口是否可以改大小、默認(rèn)顯示的網(wǎng)頁

          在框架定義頁面中,不能出現(xiàn)<body>及<body>的子標(biāo)記,換句話說,<frameset>和<body>只能選擇其中一個。

          2、框架的代碼結(jié)構(gòu)

          <frameset>

          <frame />

          <frame />

          </frameset>

          3、<frameset>的常用屬性

          Rows:指定框架為上下型,例如:rows=“180,*”,上窗口的高為180px,剩下都給下窗口。

          Rows=“180,20,*”,頂窗口高為180px,中窗口高為20px,剩下高都給下窗口。

          Rows=“20%,50%,*”

          Cols:劃分框架為左右型,例如:cols=“200,*”,左窗口寬為200px,剩下都給右窗口。

          Cols=“200,10,*”

          Frameborder:是否顯示框架邊線,取值:1或0,yes或no

          Border:指定邊框的粗細(xì)

          Bordercolor:邊框的顏色

          Framespacing:指框架邊框間的距離

          4、<frame>的常用屬性:主要定義:是否可以調(diào)整大小、是否顯示滾動條、默認(rèn)頁設(shè)置

          Src:設(shè)置小窗口中顯示的默認(rèn)網(wǎng)頁;

          Noresize:是否可以調(diào)整窗口的大小,取值:noresize

          Scrolling:是否顯示滾動條,取值:yes、no、auto(自動)

          Name:設(shè)置每個小窗口的

          Index.html

          4.行內(nèi)框架<iframe></iframe>

          <iframe>是<body>的子元素

          <ifame>是嵌套到<body>元素中的。

          常用屬性

          Src:引入哪個HTML文件

          Width:指行內(nèi)框架的寬度

          Height:指行內(nèi)框架的高度

          Scrolling:是否顯示滾動條

          Align:水平對齊方式


          主站蜘蛛池模板: 狠狠做深爱婷婷久久综合一区| 一区二区传媒有限公司| 亚洲一区二区三区免费在线观看 | а天堂中文最新一区二区三区| 亚洲av午夜福利精品一区人妖| 国产精品无码亚洲一区二区三区| 久久99国产精品一区二区| 蜜桃视频一区二区三区| 后入内射国产一区二区| 国产小仙女视频一区二区三区| 亚洲中文字幕在线无码一区二区| 高清一区二区三区免费视频 | 亚洲av无码一区二区三区天堂古代| 日韩人妻无码一区二区三区久久99| www.亚洲一区| 一区二区三区在线播放| 痴汉中文字幕视频一区| 国产一区在线播放| 波霸影院一区二区| 国产天堂一区二区综合| 国产精品一区二区久久精品无码 | 亚洲A∨无码一区二区三区| 中文字幕无码一区二区免费 | 青娱乐国产官网极品一区| 在线观看视频一区二区| 国产福利一区二区精品秒拍| 女人18毛片a级毛片一区二区| 成人区人妻精品一区二区三区| 午夜DV内射一区区| 日韩一区二区三区视频| 好吊视频一区二区三区| 精品一区二区三区四区| 精品国产一区二区三区不卡| 中文精品一区二区三区四区| 无码人妻av一区二区三区蜜臀| 国产在线第一区二区三区| 一区二区三区在线观看视频| 国产无线乱码一区二三区| 色老头在线一区二区三区| 久久蜜桃精品一区二区三区| 色一情一乱一伦一区二区三区日本 |