کتاب جنگ سایبری نسخه PDF انگلیسی
کتاب جنگ سایبری نسخه PDFفارسی قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.
بازگشت به محصولات
کتاب یادگیری عمیق: رویکرد عملی اثر جاش پترسون و آدام گیبسون نسخه PDF انگلیسی
کتاب یادگیری عمیق: رویکرد عملی اثر جاش پترسون و آدام گیبسون نسخه PDF انگلیسی قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.

کتاب دستور زبان جاوااسکریپت ۲ نسخه PDF انگلیسی

قیمت اصلی ۸۴.۸۷۰ تومان بود.قیمت فعلی ۳۸.۴۵۰ تومان است.

مشخصات فایل

  • نوع فایل: PDF
  • زبان: انگلیسی
  • تعداد صفحات: 284 صفحه
  • حجم فایل: 20.7 مگابایت
  • قابل استفاده در: موبایل، تبلت، کامپیوتر
  • نوع دسترسی: دانلود فوری بعد از خرید
دسته:
توضیحات

معرفی کتاب JavaScript Grammar اثر Greg Sidelnikov

JavaScript Grammar اثر Greg Sidelnikov یک راهنمای آموزشی برای درک ساختار زبان JavaScript، رفتار Scope و Functionها، Objectها، Prototypeها و قابلیت‌های مدرن این زبان است. فایل این محصول با نامی مرتبط با JavaScript Grammar II ثبت شده است؛ بنابراین در توضیحات حاضر از نسبت دادن شماره ویرایش یا سال دقیق فراتر از چیزی که فایل به‌طور قطعی نشان می‌دهد خودداری می‌کنیم و تمرکز را روی محتوای قابل اتکای کتاب و مفاهیم ماندگار JavaScript قرار می‌دهیم. این اثر برای برنامه‌نویسی مناسب است که Syntax مقدماتی را دیده اما می‌خواهد بداند چرا یک قطعه Code در Runtime رفتار خاصی دارد، Scope چگونه تعیین می‌شود، Closure چگونه State را حفظ می‌کند و Prototype Chain چه نقشی در Object-oriented JavaScript دارد.

یادگیری حرفه‌ای JavaScript فقط حفظ کردن Keywordها نیست. بخش زیادی از Bugهای واقعی زمانی رخ می‌دهند که Developer تفاوت Primitive و Reference، Coercion، Hoisting، Lexical Scope، this، Asynchronous Execution یا Mutability را دقیق نمی‌داند. چنین مفاهیمی در Frameworkهای مختلف نیز باقی می‌مانند؛ چه با JavaScript خالص کار کنید، چه با React، Vue، Node.js یا ابزارهای دیگر.

JavaScript چگونه اجرا می‌شود؟

JavaScript یک زبان سطح بالا با Runtime و Event Loop است. Engine Source Code را Parse و Compile/Interpret می‌کند و سپس Statementها در Execution Contextهای مختلف اجرا می‌شوند.

برای درک رفتار زبان باید میان Call Stack، Heap و Queueهای مربوط به عملیات Async تفاوت گذاشت. این مدل کمک می‌کند دلیل اجرا شدن Callbackها یا Promiseها در زمان‌های متفاوت روشن شود.

Execution Context

هنگام اجرای Global Code یا فراخوانی Function، Context جدیدی ساخته می‌شود. Variable Environment، Scope و مقدار this با این Context مرتبط‌اند.

درک Execution Context پایه فهم Hoisting، Closure و Function Call است.

Primitive Values

نوع‌های Primitive شامل String، Number، Boolean، undefined، null، Symbol و BigInt هستند. این مقدارها رفتار Value-like دارند و برخلاف Objectها Propertyهای mutable واقعی روی خود Value ذخیره نمی‌کنند.

شناخت Type برای Comparison، Conversion و API Design اهمیت دارد.

Reference-like Behavior در Objectها

Object، Array و Function Object هستند. وقتی Object را به Variable دیگری Assign می‌کنیم معمولاً هر دو Reference به همان Object اشاره می‌کنند.

به همین دلیل تغییر Property از یک Reference می‌تواند از Reference دیگر نیز دیده شود.

typeof

Operator typeof برای بررسی نوع مفید است، اما رفتار تاریخی خاصی دارد؛ برای مثال typeof null نتیجه object می‌دهد.

برای Array معمولاً Array.isArray انتخاب دقیق‌تری است.

Type Coercion

JavaScript در بعضی Operationها Type را به شکل ضمنی تبدیل می‌کند. این قابلیت می‌تواند Convenient باشد اما اگر Rules شناخته نشوند Bug ایجاد می‌کند.

استفاده آگاهانه از Conversion صریح در Code حساس خوانایی را افزایش می‌دهد.

Equality

== پیش از Comparison ممکن است Coercion انجام دهد، در حالی که === Type و Value را بدون تبدیل مشابه مقایسه می‌کند.

در بیشتر Codeهای Application استفاده از Strict Equality رفتار قابل پیش‌بینی‌تری ایجاد می‌کند.

Truthy و Falsy

Conditionها فقط Boolean نمی‌پذیرند و Valueهای دیگر نیز به Boolean تبدیل می‌شوند. مقادیری مانند 0، رشته خالی، null، undefined و NaN falsy هستند.

این رفتار در Default Value و Validation اهمیت دارد.

NaN

NaN نشان‌دهنده نتیجه عددی نامعتبر است. نکته مهم این است که NaN حتی با خودش نیز برابر نیست.

برای بررسی آن Number.isNaN معمولاً مناسب‌تر از Comparison مستقیم است.

var

var Function-scoped است و Declaration آن Hoist می‌شود. همین رفتار می‌تواند در Loop یا Blockهای شرطی نتیجه غیرمنتظره بسازد.

در Code مدرن معمولاً let و const انتخاب‌های واضح‌تری هستند.

let و const

let و const Block-scoped هستند. const اجازه Reassignment Reference را نمی‌دهد، اما اگر Value یک Object باشد Propertyهای آن همچنان می‌توانند تغییر کنند.

پس const به معنی Immutable Object نیست.

Temporal Dead Zone

Variableهای let و const از ابتدای Scope شناخته می‌شوند، اما تا Declaration قابل دسترسی نیستند. این فاصله Temporal Dead Zone نام دارد.

Scope

Scope تعیین می‌کند یک Identifier از کجا قابل دسترسی است. JavaScript از Lexical Scope استفاده می‌کند؛ یعنی Structure Source Code روی Resolution Variableها اثر دارد.

Lexical Environment

Function داخلی می‌تواند Variableهای Scope بیرونی را ببیند. همین Relation پایه Closure است.

Hoisting

Declarationها در مرحله ایجاد Context ثبت می‌شوند، اما رفتار Function Declaration، var و let/const یکسان نیست.

Hoisting را بهتر است به‌عنوان رفتار Environment هنگام ایجاد Context فهمید، نه اینکه «خط‌ها واقعاً به بالا منتقل می‌شوند».

Function Declaration

Function Declaration معمولاً پیش از محل نوشتاری خود قابل فراخوانی است، زیرا Binding آن هنگام ایجاد Scope آماده می‌شود.

Function Expression

در Function Expression، Function به Variable Assign می‌شود و Availability آن به Ruleهای همان Variable وابسته است.

Arrow Functions

Arrow Function Syntax کوتاه‌تری دارد و this مستقل نمی‌سازد. این رفتار در Callbackها مفید است اما Arrow Function جایگزین همه Functionهای معمولی نیست.

Lexical this

Arrow Function مقدار this را از Scope بیرونی می‌گیرد. به همین دلیل برای Methodهایی که به Receiver پویا نیاز دارند ممکن است انتخاب نامناسبی باشد.

this در Function معمولی

مقدار this در Function معمولی به نحوه Call بستگی دارد. Method Call، Constructor Call و explicit binding رفتار متفاوتی دارند.

یکی از Bugهای متداول JavaScript جدا کردن Method از Object و از دست دادن Context آن است.

call، apply و bind

این Methodها امکان کنترل this را فراهم می‌کنند. bind Function جدید با Context ثابت می‌سازد، در حالی که call و apply Function را اجرا می‌کنند.

Closure

Closure زمانی شکل می‌گیرد که Function پس از پایان Scope بیرونی همچنان به Variableهای آن دسترسی داشته باشد.

Closure برای Encapsulation، Factory Function، Event Handler و State کوچک کاربرد دارد.

Memory و Closure

Closure می‌تواند Data را زنده نگه دارد. اگر Referenceهای غیرضروری حفظ شوند، Memory Usage افزایش می‌یابد.

پس Closure ابزار قدرتمندی است اما باید Lifetime داده را فهمید.

Functionهای Higher-order

Function می‌تواند Function دیگر را ورودی بگیرد یا خروجی دهد. map، filter و reduce نمونه‌هایی از APIهایی هستند که از این قابلیت بهره می‌برند.

Array

Array Structure ترتیبی برای نگهداری Valueهاست و مجموعه بزرگی از Methodهای Transformation و Search دارد.

شناخت تفاوت Methodهای Mutating و Non-mutating برای مدیریت State مهم است.

map

map برای هر Element خروجی جدید تولید و Array جدید می‌سازد. زمانی مناسب است که هدف Transformation یک‌به‌یک باشد.

filter

filter Elementهایی را نگه می‌دارد که Predicate برای آن‌ها true باشد.

reduce

reduce مجموعه را به یک Accumulator تبدیل می‌کند. این ابزار قدرتمند است، اما اگر Callback پیچیده شود Loop یا Functionهای واضح‌تر ممکن است Readability بهتری داشته باشند.

some و every

some بررسی می‌کند حداقل یک Element شرط را برآورده می‌کند و every نیازمند درست بودن شرط برای همه Elementهاست.

find

find اولین Element سازگار با شرط را برمی‌گرداند و برای Search ساده مناسب است.

Array Mutation

Methodهایی مانند push، pop، splice و sort می‌توانند Array اصلی را تغییر دهند. در معماری‌هایی که State immutability مهم است باید این رفتار آگاهانه مدیریت شود.

Object

Object مجموعه‌ای از Propertyهاست که Key به Value نگاشت می‌شود. Objectها پایه بسیاری از Modelهای Domain در JavaScript هستند.

Property Access

Dot notation برای Keyهای ثابت و bracket notation برای Keyهای dynamic مفید است.

Destructuring

Destructuring امکان استخراج Property یا Elementها را در Syntax کوتاه فراهم می‌کند. Default Value و Rest Pattern نیز با آن ترکیب می‌شوند.

Spread Syntax

Spread برای باز کردن Iterable یا Propertyهای Object استفاده می‌شود. Copy حاصل از Spread معمولاً Shallow است.

Nested Objectها همچنان Reference مشترک دارند.

Rest Parameters

Rest تعداد متغیری از Argumentها را به Array تبدیل می‌کند و جایگزین خواناتری برای بعضی استفاده‌های قدیمی از arguments است.

Prototype

JavaScript از Prototype-based inheritance استفاده می‌کند. Object می‌تواند Property را از Prototype خود پیدا کند.

Prototype Chain

اگر Property روی Object وجود نداشته باشد، Lookup در Prototype ادامه پیدا می‌کند تا به null برسد.

فهم این Chain برای Method Sharing و رفتار Classها ضروری است.

Constructor Function

پیش از Class Syntax، Constructor Function همراه new روش رایج ساخت Instance بود. Prototype Methodها میان Instanceها Share می‌شوند.

class Syntax

Class در JavaScript Syntax سطح بالاتری روی سیستم Prototype است و مدل ارث‌بری مستقل جدیدی ایجاد نمی‌کند.

Inheritance

extends و super ساخت Hierarchy را ساده می‌کنند. با این حال Composition اغلب Coupling کمتری ایجاد می‌کند.

Encapsulation

Encapsulation یعنی محدود کردن State داخلی و ارائه Interface مشخص. Closure، Module و Private Fieldهای جدیدتر ابزارهایی برای این کار هستند.

Iterables

Iterable Objectی است که Protocol مربوط به Symbol.iterator را پیاده‌سازی می‌کند. Array، String، Map و Set نمونه‌های مهم‌اند.

Iterator

Iterator Objectی با Method next است که Value و done را برمی‌گرداند.

Generators

Generator با function* و yield امکان تولید Lazy Sequence را فراهم می‌کند.

Generator برای Pipeline، Traversal و State Machine ساده مفید است.

Map

Map Structure Key/Value است و برخلاف Object محدود به String/Symbol Key نیست. برای Lookupهایی که Semantics Map دارند انتخاب خوبی است.

Set

Set مجموعه Valueهای یکتا نگه می‌دارد. حذف Duplicate یا Membership Test از کاربردهای رایج آن است.

Modules

Module Code را به Scopeهای جدا تقسیم می‌کند و import/export Contract میان Fileها را مشخص می‌کند.

این ساختار Global Namespace را کاهش و Testing را ساده می‌کند.

Asynchronous JavaScript

عملیات Network، Timer و I/O معمولاً Async هستند. JavaScript با Callback، Promise و async/await این Flow را مدیریت می‌کند.

Callback

Callback Functionی است که برای اجرای بعدی ارسال می‌شود. Nesting زیاد Callback می‌تواند Error Handling و Readability را دشوار کند.

Promise

Promise وضعیت pending، fulfilled یا rejected دارد و Chain کردن عملیات Async را ساختاریافته‌تر می‌کند.

async/await

async و await Syntaxی شبیه Flow ترتیبی روی Promiseها ارائه می‌دهند. Error همچنان باید با try/catch یا Promise handling مدیریت شود.

Event Loop

Event Loop هماهنگ می‌کند Callbackهای آماده چه زمانی وارد Call Stack شوند. JavaScript روی Browser معمولاً یک Thread اصلی برای اجرای Code UI دارد.

Task و Microtask

Promise callbackها معمولاً در Microtask Queue قرار می‌گیرند و ترتیب آن‌ها با Timer callbackها متفاوت است.

فهم این تفاوت برای پیش‌بینی ترتیب Logها و جلوگیری از Starvation مهم است.

setTimeout

Delay در setTimeout زمان تضمین‌شده اجرا نیست؛ حداقل زمانی است که Callback پیش از آن اجرا نمی‌شود. اگر Stack مشغول باشد اجرا دیرتر می‌شود.

DOM

Document Object Model ساختار Page را به Objectهایی قابل دستکاری تبدیل می‌کند. Query، تغییر Attribute و ساخت Element از عملیات پایه‌اند.

Events

Browser Eventهایی مانند click، input و keydown تولید می‌کند. Event Listener باید Lifecycle مناسبی داشته باشد تا Leak یا رفتار تکراری ایجاد نشود.

Event Bubbling

Event می‌تواند از Element هدف به Ancestorها Bubble کند. Event Delegation از همین رفتار برای مدیریت تعداد زیادی Element استفاده می‌کند.

preventDefault و stopPropagation

این دو Method رفتار متفاوت دارند: یکی Default Action Browser را متوقف و دیگری مسیر Propagation را کنترل می‌کند.

requestAnimationFrame

برای Animationهای وابسته به Rendering Browser، requestAnimationFrame معمولاً مناسب‌تر از Timer ثابت است، زیرا با چرخه Paint هماهنگ می‌شود.

Performance

Performance JavaScript به Algorithm، DOM Access، Allocation و Network وابسته است. Micro-optimization بدون Profiling معمولاً اولویت درستی نیست.

Debounce

Debounce اجرای Function را تا آرام شدن Eventها عقب می‌اندازد. Search Input نمونه کاربردی آن است.

Throttle

Throttle تعداد اجرای Function در بازه زمانی را محدود می‌کند و برای scroll یا resize مفید است.

Error Handling

try/catch برای Exceptionهای synchronous و خطاهای await‌شده استفاده می‌شود. Error باید Context کافی داشته باشد و Failure خاموش نشود.

Custom Error

ساخت Errorهای Domain-specific به Caller اجازه می‌دهد Failureهای مختلف را جدا مدیریت کند.

Strict Mode

Strict Mode برخی رفتارهای مبهم یا خطرناک قدیمی را محدود می‌کند. Moduleهای ES به‌صورت پیش‌فرض strict هستند.

Debugging

Browser DevTools، Breakpoint، Network Panel و Console ابزارهای اصلی Debug هستند. خواندن Stack Trace مهارتی ضروری است.

Linting

Linter خطاهای رایج و Style ناسازگار را زودتر پیدا می‌کند. Ruleها باید با Team و Codebase هماهنگ باشند.

Testing

Unit Test برای Functionهای Pure آسان‌تر است. Separation بین Logic و DOM/Network Testing را ساده می‌کند.

Immutability

کاهش Mutation غیرضروری Reasoning درباره State را آسان می‌کند. با این حال JavaScript ذاتاً Objectهای mutable دارد و باید الگوی تیم مشخص باشد.

Functional Style

Functionهای کوچک، Transformationهای روشن و Side Effect محدود می‌توانند Code را قابل پیش‌بینی‌تر کنند.

Object-oriented Style

در Domainهایی با Entity و Behavior مرتبط، Object و Class می‌توانند ساختار مناسبی باشند. JavaScript اجازه ترکیب چند Paradigm را می‌دهد.

ES6 و نسل‌های بعدی

let/const، Arrow Function، Class، Module، Promise، Destructuring، Rest/Spread و Iterator بخش مهمی از JavaScript مدرن را شکل دادند.

کتاب JavaScript Grammar به دوره‌ای مربوط است که قابلیت‌های ES6 تا نسل‌های بعدی ES2019/ES10 در آموزش JavaScript اهمیت ویژه‌ای پیدا کرده بودند.

محدودیت تاریخی کتاب

JavaScript و Browser APIها به‌سرعت تغییر می‌کنند. برخی Featureهای جدیدتر مانند Optional Chaining، Nullish Coalescing، Private Fields و Top-level Await ممکن است در نسخه فایل حاضر پوشش داده نشده باشند.

بهتر است Conceptهای زبان را از کتاب یاد بگیرید و Syntax و Compatibility جدید را با Documentation فعلی تکمیل کنید.

خوانایی کد

Code کوتاه الزاماً Code خوب نیست. Naming، Function Size، Control Flow و Data Shape باید برای Reader قابل فهم باشند.

Separation of Concerns

Logic، DOM Manipulation، Network و State بهتر است مرزهای مشخص داشته باشند. این تفکیک Refactoring و Testing را آسان‌تر می‌کند.

Dependency Management

Projectهای جدید از Package Manager و Module System استفاده می‌کنند. Dependency باید Version و Security Update مناسب داشته باشد.

Security

JavaScript سمت Client نباید Secret نگه دارد. هر Data دریافتی از User یا Network باید بر اساس Context Validate یا Escape شود.

XSS

قرار دادن String غیرقابل اعتماد در HTML می‌تواند Cross-site Scripting ایجاد کند. استفاده از APIهای safe DOM و Encoding مناسب ضروری است.

JSON

JSON Format رایج انتقال Data است. Parse کردن Data به معنی معتبر بودن Schema آن نیست و Validation همچنان لازم است.

روش مطالعه پیشنهادی

برای هر موضوع یک مثال بسیار کوچک در Console یا Browser بسازید. رفتار Scope، this، Prototype و Event Loop را با Log و Breakpoint مشاهده کنید.

سپس همان Concept را در یک Mini Project استفاده کنید تا تفاوت حفظ Syntax و فهم Runtime روشن شود.

پروژه تمرینی

یک Task Manager کوچک با Module، Event، Local State، Async API و Validation بسازید. تلاش کنید Business Logic را از DOM جدا نگه دارید و Unit Test برای Functionهای اصلی بنویسید.

این کتاب برای چه کسانی مناسب است؟

  • توسعه‌دهندگان Frontend در سطح مقدماتی تا متوسط.
  • برنامه‌نویسانی که می‌خواهند Scope، Closure و this را عمیق‌تر بفهمند.
  • افراد علاقه‌مند به Prototype و Object Model جاوااسکریپت.
  • توسعه‌دهندگان Node.js که به مبانی خود زبان نیاز دارند.
  • کسانی که قصد یادگیری Event Loop و Async JavaScript دارند.

جمع‌بندی

JavaScript Grammar اثر Greg Sidelnikov راهنمایی برای عبور از یادگیری سطحی Syntax و رسیدن به فهم رفتار واقعی JavaScript است. Typeها، Scope، Function، Closure، this، Array Methodها، Objectها، Prototype، Class، Iterator، Promise، Event Loop و Browser Eventها از مباحثی هستند که پایه توسعه حرفه‌ای JavaScript را می‌سازند.

با توجه به سرعت تغییر اکوسیستم وب، جزئیات Version-sensitive باید با مستندات جدید تکمیل شوند؛ اما مفاهیم اصلی زبان همچنان ماندگارند. خواننده‌ای که این پایه‌ها را به‌درستی بفهمد، در یادگیری Frameworkها نیز کمتر به حفظ Recipe وابسته می‌شود و می‌تواند دلیل رفتار Code و Failureهای آن را دقیق‌تر تحلیل کند.

نظرات (0)

نقد و بررسی‌ها

هنوز بررسی‌ای ثبت نشده است.

اولین کسی باشید که دیدگاهی می نویسد “کتاب دستور زبان جاوااسکریپت ۲ نسخه PDF انگلیسی”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

Shipping & Delivery