Javascript基础系列-javascript概述

栏目: JavaScript · 发布时间: 5年前

内容简介:核心是针对window.onload是在dom文档树加载完和所有文件加载完之后执行一个函数。 document.ready原生中没有这个方法。jquery中有 (document).ready要比winndow.onload先执行window.onload只能出来一次,$(document).ready可以出现多次

核心是针对 文本数组日期正则表达式 的操作定义了很少的api,但是这个api不包括输入输出功能。输入和输出功能(类似网络、存储和图形相关的复杂特性)是由Javascript所属的 宿主环境 提供的

表达式和语句

  • 表达式仅仅计算出一个值但并不做任何操作,它并不改变程序的运行状态。
  • 语句并不包含一个值(或者说它包含的值我们并不关心),但他们改变程序的运行状态。

当函数和对象合写在一起时,函数就变成了方法。

let a = {
        fn:function(){
            console.log('这个函数就是方法!')
        }
    }
复制代码

window.onload 和document.ready

window.onload是在dom文档树加载完和所有文件加载完之后执行一个函数。 document.ready原生中没有这个方法。jquery中有 (document).ready要比winndow.onload先执行window.onload只能出来一次,$(document).ready可以出现多次

Javascript是区分大小写的语言。

Javascript会忽略程序中标识之间的空格

注释

但是不能有嵌套的注释

直接量

直接量 就是程序中直接使用的数据值,例如下面:

12
    1.2
    "hello world"
    'hi'
    true
    false
    /javascript/gi
    null
复制代码

标识符(变量)命名规范

Javascript标识符必须使用数字、字母、下划线和$符号命名,数字不能作为开头。

关键字和保留字(不能用作变量名,当前版本不使用,后续版本可能会用到)

Javascript的具体实现

具体实现可能定义独有的全局变量和函数,每一种特定的Javascript运行环境(客户端、服务端)都有自己的一个全局属性列表。

可选的分号

Javascript并不是在所有换行处都填补分号:只有在缺少了分号就无法正确解析代码的时候,Javascript才会填补分号。

在return、break和continue和随后的表达式之间不能有换行。如果添加了换行,程序则只有在极特殊的情况下才会报错,而且程序的调试非常不方便

类型、值和变量

Javascript的数据类型分为两类: 原始类型 (基本数据类型)和 对象类型 (引用数据类型)。原始类型包括数字、字符串、和布尔值。

Javascript中有两个特殊的原始值:null(空)和undefined(未定义)

对象(object)是属性(property)的集合,每个属性都由“名/值对”(值可以是原始值,比如数字、字符串,也可以是对象)构成。

普通的Javascript对象是“命名值”的无序集合。Javascript同样定义了一种特殊的对象----数组(表示带编号的值的有序集合)

Javascript还定义了另一种特殊对象----函数。函数是具有与它相关联的可执行代码的对象,通过调用函数来运行可执行代码,并返回运算结果。

如果函数用来初始化(使用new运算符)一个新建的对象,我们称之为构造函数

在Javascript中只有null和undefined是无法拥有方法的值。

在Javascript中,字符串是不可变的:可以访问字符串任意位置的文本,但Javascript并未提供修改已知字符串的文本内容的方法。

不在任何函数内声明的变量称做 全局变量 ,它在Javascript程序中的任何地方都是可见的。

Javascript 中的所有数字均用 浮点数值 表示

当数字运算结果超过了Javascript所能表示的数字上限(溢出),结果为一个特殊的无穷大值,在Javascript中以infinity表示。

零除以零是没有意义的,这种整除运算结果也是一个非数字值,用NaN表示

Javascript中的非数字值有一点特殊:它和任何值都不相等,包括自身。也就是说,没办法通过x==NaN来判断变量x是否是NaN。相反,应当使用x!=x来判断,当且仅当x为NaN的时候,表达式的结果才是true。

由于舍入误差,0.3和0.2之间的近似值实际上并不等于0.2和0.1之间的近似差值。

字符串是一组由16位值组成的不可变的有序序列,每个字符通常来自于Unicode字符集。

字符串直接量可以拆分为数行,每行必须以反斜线(\)结束,反斜线和行结束符都不算是字符串直接量内容。

Javascript的内置功能之一就是字符串连接。如果将加号(+)运算符用于数字,表示两个数相加。但将它作用于字符串,则表示字符串连接,将第二个字符拼接在第一个之后。 在Javascript中字符串是固定不变的,类似replace()和toUppercase()的方法都返回新字符串,原字符串本身并没有发生改变。

布尔值

  • 下面这些值都会被转化为false
    • undefined
    • null
    • -0
    • NaN
    • ""

全局对象

  • 当javascript解释器启动时(或者任何Web浏览器加载页面的时候),它将创建一个新的全局对象,并给它一组定义的初始属性。
  • 在代码的最顶级----不在任何函数内的Javascript代码----可以使用Javascript关键字this来引用全局对象。
  • 如果代码声明了一个去全局变量,这个全局变量就是全局对象的一个属性。

包装对象

  • 当使用字符串的一个方法或者属性时,Javascript就会将字符串值通过调用new String() 的方式转化成对象,这个对象继承了字符串的方法,并被用来处理属性的引用。一旦属性引用结束,这个新创建的对象就会销毁(其实在实现上并不一定创建或销毁这个临时对象,然而整个过程看起来是这样)
  • 当运行这段代码时,t的值是undefined。第二行代码创建一个临时字符串对象,并给其len属性赋值为4,随即销毁这个对象。第三行通过原始的(没有修改过)字符串创建一个新的字符串对象,尝试读取其len属性,这个属性并不存在。表达式求值结果为undefined。
var s = "test"
    s.len = 4;
    var t = s.len // undefined
复制代码
  • 存取字符串、数字或者布尔值的属性时创建的临时对象称做包装对象。
  • 通常,包装对象只是被看做是一个实现细节,而不用特别关注。由于字符串、数字和布尔值的属性都是只读的,并且不能给他们定义新属性。因此他们是有别于对象的。
  • Javascript会在必要时将包装对象转换为原始值,因此上段代码中的对象S、N、和B常常(但不总是)表现的和值s、n和b一样。“==”等于运算符将原始值和其包装对象视为相等,但“===”全等运算符将他们视为不等。通过typeof运算符可以看到原始值和其包装对象的不同。
var s = "test",n=1,b=true
    var S = new String(s)
    var N = new String(n)
    var B = new String(b)
复制代码

不可变得原始值和可变的对象引用

  • 字符串中所有的方法看上去返回了一个修改后的字符串,实际上返回的是一个新的字符串值
  • 原始值的比较是值的比较:只有在他们的值相等时他们才相等
  • 如果比较两个单独的字符串,当且仅当他们的长度相等且每个索引的字符都相等时,Javascript才认为它们相等。
  • 对象的比较并非值的比较:即使两个对象包含同样的属性及相同的值,他们也是不相等的。各个索引元素完全相等的两个数组也不相等。
  • 对象值都是引用,对象的比较均是引用的比较:当且仅当他们引用同一个基对象时,他们才相等。
  • 如果你想得到一个对象或数组的副本,则必须显式复制对象的每个属性或数组的每个元素。
function equalArrays(a,b){
        if(a.length!=b.length) return false;
        for(var i = 0;i < a.length;i++){
            if(a[i]!==b[i]) return false;
            return true
        }
    }
复制代码

类型转换

x+"" // 等价于String(x)
    +x   //  等价于Number(x)也可以写成x-0
    !!x  //  等价于Boolean(x) 注意是双叹号
复制代码
  • Number类定义的toString()方法可以接收表示转换基数(radix)的可选参数,如果不指定此参数,转换规则将是基于十进制。
var n  = 17;
    binary_string = n.toString(2);
    octal_string = "0" + n.toString(8);
    hex_string =  "0x" + n.toString(16)
复制代码
  • toFixed() 根据小数点后的指定位数将数字转换为字符串,它从不使用指数记数法。
  • 如果通过Number()转换函数传入一个字符串,它会试图将其转换为一个整数或浮点数直接量,这个方法只能基于十进制数进行转换,并且不能出现非法的尾随字符。
  • parseInt和parseFloat都会跳国任意数量的前导空格,尽可能解析更多数值字符,并忽略后面的内容。如果第一个非空格字符是非法的数字直接量,将最终返回NaN。
  • parseInt可以接收第二个可选参数,这个参数指定数字转换的基数,合法的取值范围是2~36.
  • 对象到布尔值的转换非常简单:所有的对象(包括数组和函数)都转换为true。对于包装对象也是如此。

不同的特定的toString

  • 对象:返回一个字符串类似"[object Object]"
  • 数组:将数组元素转换为一个字符串,并在元素之间添加逗号后合并成结果字符串。
  • 函数:返回这个函数的实现定义的表示方法。
  • 日期:方法返回一个可读的(可被Javascript解析的)日期和时间字符串。
  • 正则:将RegExp对象转换为表示正则表达式直接量的字符串。

Javascript中对象到字符串的转换

  • 对象调用toString()方法,返回一个原始值,将这个值转换为字符串,并返回这个字符串结果。如果toString()方法不返回一个原始值,那么Javascript会调用valueOf()方法。返回值是原始值,将这个值转换为字符串。返回这个字符串。两种方法都不能获得一个原始值,因此会抛出一个类型错误异常。

Javascript中对象到数字的转换

  • js做了同样的事情,只不过它先尝试使用valueOf()方法。在使用toString()方法。在转换为数字。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

有的放矢

有的放矢

Nathan Furr、Paul Ahlstrom / 七印部落 / 华中科技大学出版社 / 2014-4-20 / 38.00元

创业需要大笔资金吗?自信的人适合创业吗?好点子究竟来自哪里?《有的放矢:NISI创业指南》的两位作者拥有多年创业与投资经验,收集了大量的一手案例和资料,提出有的放矢创业流程,帮助创业者规避创业风险,提高创业成功率。一起来看看 《有的放矢》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具