Javascript: 1부 강제, Let vs Const vs var

Javascript는 인터넷에서 가장 유행하는 언어 중의 하나이다.StackOverflow에 따르면 2021년 조사javascript는 2021년에 가장 유행하는 프로그래밍/스크립트 언어이다.
어떤 사람들은 자바스크립트가 이상한 프로그래밍 언어라고 말하지만, 때로는 그렇다.특히 자바스크립트는 C/C++/자바와 유사한 문법을 가지고 있기 때문에 개발자들은 자바스크립트도 비슷한 의미를 가진다고 생각한다.사실이 그렇지 않다는 것을 증명할 때, 개발자들은 종종 곤혹스럽고 낙담한다.즉, 개발을 막 접한 사람에게 다른 프로그래밍 언어의 경험이 없으면 자바스크립트가 다른 대부분의 언어보다 더 낯설어 보일 것이라고 생각하지 않는다는 것이다.

이 시리즈에서 우리는 자바스크립트의 이상한 부분을 깊이 있게 연구하고 자바스크립트가 배후에서 어떻게 일을 하는지 이해하려고 한다.
자바스크립트는 아주 나쁜 서면 언어가 아닙니다. 자바스크립트를 실행하는 데 사용하는 컴퓨터나 브라우저에서 추상화할 뿐입니다.이를 위해, 우리는 이 공구들이 어떻게 작동하는지 알아야 한다.자바스크립트를 사용하면 이런 개념을 이해할 필요가 없다고 말할 수 있지만 우리가 깊이 들어가면 이러한 기본 개념을 이해할 수 있다. 이것은 개념에 대한 구체적인 이해를 돕고 깜짝 놀랄 때가 있을 것이다.이런 기본 부분을 이해하면 우수 개발자와 일반 개발자를 구분할 수 있다.

협박:
모인부터.강제란 값을 한 데이터 형식에서 자동으로 또는 은밀하게 다른 데이터 형식으로 바꾸는 과정을 말한다.

0이 정수이고'0'이 문자열일 때 도대체 어떻게 된 거야0 == "0".자바스크립트 세계에 오신 것을 환영합니다.자바스크립트 세계에서 두 개의 값을 ==와 비교할 때 한 값이 강제될 수 있습니다.JavaScript는 약형 언어로 값도 서로 다른 유형 사이에서 자동으로 변환할 수 있다implicit type coercion.

이 뿐만 아니라, 그룹 (본질적으로 원어가 아닌 것) 도 문자열 (원어 형식) 으로 강제로 변환됩니다.[]는 빈 그룹이기 때문에 빈 문자열로 변환됩니다.
Untitled
그런데 0 == "0"가 사실이고 0 == []가 사실이라면 왜 "0" == []가 가짜일까.만약 네가 앞의 두 부분을 이해한다면, 이 부분은 의미가 있을 것이다."0"는 하나의 문자열이고 []는 하나의 대상(다른 이야기의 원인)이다. 그러면 []을 문자열로 바꾸면 빈 문자열""이 된다.그래서 "0" == "" 가짜예요.

2. Vs Const Vs Var 를 설정합니다.
ES6 자바스크립트를 사용할 때 letconst 자바스크립트에서 변수를 설명하는 새로운 방법을 사용해서 깜짝 놀랐습니다. 이것은 var 변수를 설명하는 낡은 방법과 다르다.
let,const,var 사이의 전쟁을 시작하기 전에 먼저 두 개의 concpetScopeHoisting를 알아야 합니까?

범위:
내가 말하고 싶은 것은 범위는'환경'이다. 이 환경에서 변수는 접근할 수 있고 볼 수 있으며 사용할 수 있다.javascript에는 세 가지 종류의 작용역이 있습니다.

  • 전 세계:
    파일에서 변수를 선언할 때 모든 함수에서 이 변수는 전역 범위이기 때문에 이 변수는 전역적이며 어디서나 액세스하고 볼 수 있으며 창과 같은 전역 대상의 속성이 됩니다.
    var myVar = 'Hello World'
    

  • 로컬 범위:
    국부 변수는 함수에서 성명된 변수로 이 함수를 실행할 때 존재하고 사라진다.생성된 기능 외에는 사용할 수 없거나 액세스할 수 없거나 표시되지 않습니다.따라서, 우리는 rest 코드에 아무런 영향을 주지 않고, 같은 이름의 국부 변수를 많이 가질 수 있다.
    var name = "Shahab"
    console.log(name) // Shahab
    
    function myName() {
        var name = "Ali"
        console.log(name) // Ali
    }
    myName()
    console.log(name) // Shahab
    

  • 청크 범위:
    국부 변수는 함수 블록 단계의 변수에서 만들어진 것으로 한 무더기의 코드에서 생존하고 소멸한다{}.

    Variables decleared with let and constare block scoped.


    function sayHello(flag){
      var name='shahab'; // local variable
      if(flag){
        const city = 'karachi'; // block scope variable, only accessible inside this if
        return `My name is ${name}, its cold in ${city}`;
      }
    
      return `My name is ${name}, its cold in ${city}`; // 
    }
    
    sayHello(true); // "My name is shahab, its cold in karachi"
    sayHello(false); // Uncaught ReferenceError: city is not defined
    

  • 크레인:
    JavaScript Upgript는 코드가 실행되기 전에 함수, 변수 또는 클래스의 선언을 해당 역할 도메인 내의 역할 도메인 상단으로 이동하는 것처럼 해석자가 해당 선언을 지우는 프로세스를 말합니다.성명하기 전에 코드에서 함수를 안전하게 사용할 수 있도록 합니다.
    이제 처음 토론한let vs const vs var로 돌아갑니다. 그것들을 하나씩 비교해 봅시다.

    변량var 키워드로 성명된 변수의 작용역은 직접 함수체(그렇기 때문에 함수/국부 작용역)입니다.var로 성명된 변수는 프로그램 맨 위로 올라가 초기화하기 전에 사용할 수 있습니다.
    console.log(num); // Returns 'undefined' from hoisted var declaration (not 6)
    var num; // Declaration
    num = 6; // Initialization
    console.log(num); // Returns 6 after the line with initialization is executed.
    

    다음을 수행하십시오.let 변수의 작용역은 {}이 표시하는 직접 폐쇄 블록(그러므로 블록 작용역이라고 부른다)이다.letconst로 성명한 변수도 높아지지만 var와 달리 기본값으로 초기화되지 않는다.초기화하기 전에 let 또는 const로 설명된 변수를 읽으면 이상이 발생합니다.
    console.log(num); // Throws ReferenceError exception as the variable value is uninitialized
    let num = 6; // Initialization
    

    콘스터:const성명과 let성명은 약간의 비슷한 점이 있다.유일하게 다른 것은 분배const의 값이 그 범위 내에서 변하지 않는다는 것이다.
    const name = "Shahab";
    name = "Ali";// error: Assignment to constant variable.
    
    따라서 모든 const 성명은 성명할 때 초기화해야 한다.

    Note: I said values assigned with const cannot be changed. in case of array and object(which are same we will learn in upcoming lectures) can be updated because object decleared with const does not store a values it stores a memory address(pointer) of those values any changes we make will on a memory address.



    그런데 왜 콘스터와 존재하게 했는지...letconst 키워드를 이 언어에 도입한 원인은 두 가지가 있다.
  • 함수/부분 범위는 JavaScript의 오류의 주요 원인 중 하나입니다.
  • 조립 작업은 의외의 결과를 초래할 수 있다.

  • 로컬 범위 문제:
    for (var i = 0; i < 5; i++) { 
      for (var i = 0; i < 3; i++) { 
        console.log("hello world"); 
      } 
    }
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // <repeats infinitely>
    
    이 문제를 해결하려면 let만 사용하십시오.이것은 i 블록 범위로 전환되며, 두 for 순환의 인용은 모두 다르다.
    for (let i = 0; i < 5; i++) { 
      for (let i = 0; i < 3; i++) { 
        console.log("hello world"); 
      }
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    // hello world
    

    크레인이 일으킨 의외의 결과:
    까다로운 것은 변수의 성명만 올라갈 수 있다는 것이다.변수도 초기화되면, 변수가 맨 위로 올라가면 정의되지 않은 것으로 설정됩니다.도달 변수를 실행하면 변수 값이 정의되지 않고 초기화 값으로 변경됩니다.
    var firstName = "Shahab";
    console.log(firstName + ' ' + lastName);
    var lastName = "Bukhari";
    
    // Shahab Undefined
    
    이것은 오류를 통해 이루어지지 않고,undefined의 기본값으로 나타납니다. 이것은 더 큰일입니다.이러한 상황을 피하기 위해서 우리는 let 또는const을 사용한다.
    let firstName = "Jennifer";
    console.log(firstName + ' ' + lastName);
    let lastName = "Bland";
    
    //Cannot access 'lastName' before initialization
    
    이것은 코드를 공개적으로 발표하기 전에 오류를 피하는 데 도움을 줄 것입니다.

    감사합니다:
    만약 네가 지금까지 읽었다면, 너는 틀림없이 이것이 매우 재미있다고 느낄 것이다. 만약 네가 약간의 것을 배웠다면, 나를 따르는 것을 고려해 봐라.나는 이 일련의 자바스크립트를 계속할 것이다. 사람을 곤혹스럽게 하는 부분은 나를 따라갈 것이다. 어떤 미래의 업데이트도 놓치지 마라.고마워요 고마워요

    좋은 웹페이지 즐겨찾기