JavaScript Feature Reference: let Declaration Web Browser Support Test

Last reviewed/updated: 01 Jan 2018 | Published: 08 Nov 2017 | Status: Active
Web browser support: Internet Explorer 10+, Edge 12+, Firefox 6+, Chrome 30+, Opera 17+

1. Introduction

In this web page there are two web browser JavaScript feature support tests; 1.) a feature implementation test, and 2.) a feature capability test. First, the implementation test is run. The implementation test determines if the web browser recognizes the JavaScript let declaration. The implementation test is a simple test for the presence of web browser support, and a definitive test for the absence of web browser support. If the web browser does not recognize the JavaScript let declaration, the testing is stopped and the implementation test reports: Fail (no support): The web browser does not recognize the JavaScript let declaration. The web browser does not support the JavaScript let declaration.

If the web browser recognizes the JavaScript let declaration, the capability test is run. The capability test determines if the web browser's implementation of the JavaScript let declaration includes support for at least one let declaration capability. The capability test is a more definitive, albeit not an all inclusive, test for the presence of web browser support. If the web browser's implementation of the JavaScript let declaration includes support for the tested capability, the capability test reports: Pass (at least partial/possibly full support): The web browser recognizes the JavaScript let declaration, and supports at least one let declaration capability. The web browser at least partially/possibly fully supports the JavaScript let declaration. Positive determination of full web browser support is beyond the scope of this test. If the web browser's implementation of the JavaScript let declaration does not include support for the tested capability, the capability test reports: Pass/Fail (partial support): The web browser recognizes the JavaScript let declaration, but does not support at least one let declaration capability. The web browser partially supports the JavaScript let declaration.

The web browser support test source code is shown in Section 2.1. The web browser support test source code is run in Section 2.2, which shows the web browser support test result.

1.1. let Declaration Web Browser Support

  • Pass (at least partial/possibly full support): IE11+, ED12+, FF44+, CH49+, OP36+.
  • Fail (no support): SF5.1.7-.

1.2. Abbreviations

  • IE = Internet Explorer.
  • ED = Edge = EdgeHTML rendering engine (ED12+) and/or Edge browser (ED20+).
  • FF = Firefox.
  • SF = Safari.
  • CH = Chrome.
  • OP = Opera.

2. let Declaration Web Browser Support Test

2.1. Web Browser Support Test Source Code

For the web browser test source code with additional comments, see let Declaration Web Browser Support Test With Additional Comments (learnwebcoding.com).
<p id='testId'><b>Fail</b> (no support): The web browser does not recognize the JavaScript <code>let</code> declaration. The web browser does not support the JavaScript <code>let</code> declaration.</p><!-- Hard code Fail because web browser no support error stops JavaScript execution. -->

<script>
// Implementation test.
var passImplementationTest = false;
let implementationVariable = "value";
if (implementationVariable){
 passImplementationTest = true;
}
// Capability test one: global abatement.
var passGlobalAbatementCapabilityTest = false;
let globalAbatementVariableOne = "valueOne";
window.globalAbatementVariableTwo = "let globalAbatementVariableTwo assignment below does not overwrite me";
let globalAbatementVariableTwo = "valueTwo";
if ((window.globalAbatementVariableOne === undefined) && (window.globalAbatementVariableTwo === "let globalAbatementVariableTwo assignment below does not overwrite me")){
 passGlobalAbatementCapabilityTest = true;
}
// Capability test two: no hoisting.
var passNoHoistingCapabilityTest = false;
try {
 noHoistingVariable;
} catch (error){
 passNoHoistingCapabilityTest = true;
}
let noHoistingVariable = "value";
// Capability test three: block scope.
var passBlockScopeCapabilityTest = false,
 passBlockScopeCapabilityTestOne = false,
 passBlockScopeCapabilityTestTwo = false,
 passBlockScopeCapabilityTestThree = false,
 passBlockScopeCapabilityTestFour = false,
 passBlockScopeCapabilityTestFive = false,
 passBlockScopeCapabilityTestSix = false;
function blockScopeCapabilityTest(){
 let blockScopeVariableOne = "valueOne"; // let inside function.
 if (true){
  if (blockScopeVariableOne){ // Determine if let inside function accessible inside if inside function.
   passBlockScopeCapabilityTestThree = true;
  }
  let blockScopeVariableTwo = "valueTwo"; // let inside if.
  if (blockScopeVariableTwo){ // Determine if let inside if accessible inside if.
   passBlockScopeCapabilityTestFour = true;
  }
 }
 if (blockScopeVariableOne){ // Determine if let inside function accessible inside function.
  passBlockScopeCapabilityTestFive = true;
 }
 if (typeof blockScopeVariableTwo === "undefined"){ // Determine if let inside if not accessible outside if.
  passBlockScopeCapabilityTestSix = true;
 }
}
if (typeof blockScopeVariableOne === "undefined"){ // Determine if let inside function not accessible outside function.
 passBlockScopeCapabilityTestOne = true;
}
if (typeof blockScopeVariableTwo === "undefined"){ // Determine if let inside if inside function not accessible outside function.
 passBlockScopeCapabilityTestTwo = true;
}
blockScopeCapabilityTest();
if (passBlockScopeCapabilityTestOne && passBlockScopeCapabilityTestTwo && passBlockScopeCapabilityTestThree && passBlockScopeCapabilityTestFour && passBlockScopeCapabilityTestFive && passBlockScopeCapabilityTestSix){
 passBlockScopeCapabilityTest = true;
}
// Capability test four: for loop iterator variable block scope.
var passForLoopIteratorCapabilityTest = false;
for (let i = 0; i < 3; i++){
}
if (typeof i === "undefined"){
 passForLoopIteratorCapabilityTest = true;
}
var passCapabilityTest = false;
if (passGlobalAbatementCapabilityTest && passNoHoistingCapabilityTest && passBlockScopeCapabilityTest && passForLoopIteratorCapabilityTest){
 passCapabilityTest = true;
}
if (passImplementationTest){
 var element = document.getElementById("testId");
 if (passCapabilityTest){
  element.innerHTML = "<b>Pass</b> (at least partial/possibly full support): The web browser recognizes the JavaScript <code>let</code> declaration, and supports at least one <code>let</code> declaration capability. The web browser at least partially/possibly fully supports the JavaScript <code>let</code> declaration. Positive determination of full web browser support is beyond the scope of this test.</p>";
 } else {
  element.innerHTML = "<b>Pass/Fail</b> (partial support): The web browser recognizes the JavaScript <code>let</code> declaration, but does not support at least one <code>let</code> declaration capability. The web browser partially supports the JavaScript <code>let</code> declaration.";
 }
}
</script>

2.2. Web Browser Support Test Result

Fail (no support): The web browser does not recognize the JavaScript let declaration. The web browser does not support the JavaScript let declaration.


3. Resources And Additional Information