JS基础随笔

  在学习的过程中总会一次次的冒出以前囫囵吞枣的地方,下面将今天学到的一下知识点记录下来方便以后查看。

  JavaScript中的数据类型

    简单(基本)数据类型:Number、String、Boolean、Undefined、Null

    复杂(引用)数据类型: Object、Array、Date、function等

  下面介绍一下简单(基本)数据类型和复杂(引用)数据类型的区别:

    简单数据类型:在栈内直接存储值,如下图所示                                          复杂数据类型:在栈内存储引用,如下图

                               

   在了解以上两种数据类型的存储方式之后可以区分两者的不同,可通过做以下的练习:

    

1    var a =10;
2    var b = a;
3    //问:当改变a的值后,b的值是否发生改变
4    a=20;
5    console.log(b);    //  10  

1 var  s1 = new Object();
2 var  s2 = s1;
3 //问:改变s1的属性后,s2相同的属性是否改变
4 s1.name = "mh";
5 console.log(s2.name);        //mh

1  function f2(arr)
2           {
3               arr = [9,8,7,6,5];//产生新的对象
4               arr[0]=-100;
5           }
6           var  array = [1,2,4,7,5];
7           f2(array);
8           console.log(array[0]);//   1

  JavaSript中的变量提升,function声明以及变量作用域

    首先先看以下下面的一道面试题:

1         var num = 10;
2         fun();
3         function fun()
4         {
5             console.log(num);
6             var num =20;
7         }        

    在没有学习之前我会直接回答为10,现在学习JavaScript中的预编译概念知道了var关键字的提升概念以及function的声明概念知道了以上代码与下面代码等量:

1          var num;//全局作用域   遇到var和function  提升
2          function  fun() {
3              var num ;    //局部做用户  遇到var 提升
4              console.log(num);
5              num =20;
6          }
7         num = 10;
8         fun();    

    再看下面这道题:

1             //问题:为什么会出现下面的错误?
2             //Uncaught TypeError:fnName is not a function
3
4             console.log(fnName(1,2));
5             var fnName = function (a,b) {
6                 return a + b;
7             }

    以上代码等同于以下代码:

1             var  fnName;
2             console.log(fnName(1,2));
3             fnName = function (a,b) {
4                 return a + b;
5             }        

    可以看到因为function在等号右面所以只会对var进行提升,从而会报“Uncaught TypeError:fnName is not a function”错误。

       了解变量的作用域可以看以下代码:

 1                 f1();
 2                 console.log(c);
 3                 console.log(b);
 4                 console.log(a);
 5                 function f1() {
 6                     var a = b = c = 20;
 7                     console.log(c);
 8                     console.log(b);
 9                     console.log(a);
10                 }

    对于var a=b=c=20; 这类连续赋值,在局部作用域内只会对a再声明,而b、c的作用域为全局作用域。所以只有全局作用域内的a报错为"Uncaught ReferenceError: a is not defined"。

时间: 2024-12-13 16:35:02

JS基础随笔的相关文章

关于js的一些基础随笔

JS基础 01. js API:别人准备好的东西,我们负责使用. 能够独立写出所有代码. 五天之后说有代码从新写一遍. 十天过后提问. 问题用red标出 02. js分为三部分.语法.注释(总结).异步以及同步(简单介绍).交换两个变量量的值. 命名规范必须遵守.类型转换.运算符.流程控制. 重点 03. 快捷键  等待添加 04. 浏览器 五大浏览器:chrome.firefox.safari.ie(*).opera. 浏览器兼容问题(important) 测试只测试这五个(chrome.fi

【 js 基础 】Javascript “继承”

是时候写一写 "继承"了,为什么加引号,因为当你阅读完这篇文章,你会知道,说是 继承 其实是不准确的. 一.类1.传统的面向类的语言中的类:类/继承 描述了一种代码的组织结构形式.举个例子:"汽车"可以被看作是"交通工具"的一种特例.我们可以定义一个 Vehicle 类和一个 Car 类来对这种关系进行描述.Vehicle 的定义可能包含引擎.载人能力等,也就是 所有交通工具,比如飞机.火车和汽车等都有的通用的功能描述.在对 Car 类进行定义的

js基础--javascript基础概念之语法

掌握一门语言 必须先掌握它的语法! javascript 的语法和C.Java.Perl 的语法有些相似.但是比它们更加宽松. javascript 中的一切都是严格区分大小写的.例如变量: demo 和 Demo 两个变量是完全不同的. javascript 标示符,所谓标示符 是指 变量.函数.属性 的名字或函数的参数.标示符的格式是按照以下规则组合的一个或多个字符. 1.第一个字符必须是字母,下划线,或 $ 符号. 2.其他字符可以是字母.下划线.$ . 或数字. 注意 不能把关键字 保留

js基础知识总结(2016.11.1)

js基础知识点总结 如何在一个网站或者一个页面,去书写你的js代码:1.js的分层(功能):jquery(tool) 组件(ui) 应用(app),mvc(backboneJs)2.js的规划():避免全局变量和方法(命名空间,闭包,面向对象),模块化(seaJs,requireJs) 常用内部类:Data Array Math String HTML属性,CSS属性HTML:属性.HTML属性="值":CSS:对象.style.CSS属性="值"; class和f

JS基础(超级简单)

1     JS基础(超级简单) 1.1 数据类型 1.1.1   基本类型: 1)        Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2)        string 3)        boolean 4)        null 5)        undefined 1.1.2   复杂类型 object:date,array,function 1.2 变量 var 变量名=值 变量的作用域:1.全局:以页面为单位.2局部:以函数为单位.

js基础--javascript基础概念之数组(二)

js基础--javascript基础概念之数组 数组栈方法 数组可以像栈一样.栈是一种先进后出的数据结构,最先添加的数据最后一个出来.栈方法添加数据也称为 推入  移除数据称为 弹出. js为数值栈方法提供了 push()   和  pop() ;  两个方法. push() push() 方法接受参数就是你要添加进入到数组的值.push()  方法会将他们逐一添加到数组的末尾  数组的length属性会跟着更新数据. *push(多个数组元素值) 返回的修改后的数组长度 var array =

js基础--javascript基础概念之数组

js基础--javascript基础概念之数组 在ECMAScript 中 ,数组是很常用的数据类型,js中的数组和其他很多语言的数组有明显的区别.js的数组可以保持任何类型的数值,一个数组中可以保存着多个不同类型的数值.js数组大小(长度)是可以调整的.可以随着数据的添加自动增长数组长度. 创建数组: 一.数组字面量 数组字面量由一对包含数组项的方括号[]表示. var array = [ 'kin', 'cheong', 'change', 'hello', 'haha', 'hi' ];

js基础--javascript基础概念之语句(二)

js基础--javascript基础概念之语句(二)label,break,continue.. break .  continue 语句. break  continue 语句用于在循环中精确控制代码的执行,其中break语句会立即退出循环,执行循环后面的语句. continue 则退出循环后返回到再次进入循环中. 如: var num = 0; for(var i = 0; i<=100; i++){ if(i >= 10){ break; } num = i; } alert(num);

JS基础知识回顾:引用类型(一)

在ECMAScript中引用类型是一种数据结构,用于将数据和功能组织在一起,而对象时引用类型的一个实例. 尽管ECMAScript从技术上讲是一门面向对象的语言,但它不具备传统的面向对象语言所支持的类和接口等基本结构,所以虽然说引用类型与类看起来想死,但他们并不是相同的概念. 不过引用类型有的时候也可以被称为对象定义,因为他们描述的是一类对象所具有的属性和方法. 新对象是使用new操作符后跟一个构造函数来实现的,构造函数本身就是一个函数,只不过该函数时处于创建新对象的目的而定义的. ECMASc