javascript学习笔记(1)-类型、

一.javascript中是弱类型,声明定义时不需指定类型,系统自动识别。系统内部共7种类型:

6种原始类型: Number,Boolean,Null,Undefined,String,Symbol(ECMAScript 6 新定义)

   其他类型:Object

//系统内部类型:var x = 1.0;       //不区分整数和浮点数,都是Number类型
var x = " i‘m ";   //字符串类型
var x = true;      //布尔类型

null             //空值
undefined       //未定义值

//特殊值:
NaN             //Not a Number,,,不与任何数字相等,包括自己,isNaN(NaN)
Infinity       //无穷大

typeof OBJ: 返回Obj的类型字符

二.变量及作用域:

javascript只有一个全局作用域window,所有全局变量其实都是绑定到window对象的

x=1;	        //不写var默认为全局变量,在js代码第一行写: "use strict:" 使用strict模式,必须加上var
var x=1;	//默认为局部变量,函数作用域内部的局部变量;
let x=1;	//for\while等块作用域
const PI;	//定义常量

三、语句:

arr  = [0,1,2];     //arr[0]、arr[1]、arr[2]

for(let i =0; i<arr.length; ++i){}   //普通的for循环

//
//特别需要注意的是,对arr添加属性arr["name"]或arr.name后:   arr.length不会增加,for-in却能访问到,,,而for-of不能//同时,,,arr[4] = "li",则length会增加到 5(因为从0开始),arr[3]为undefined,for-in不会访问undefined,而for-of会

arr.name = "li";
for(i in arr) //for-in循环,遍历所有的下标 {      arr[3] = 3;    // 循环过程中是不能访问到arr[3]的,      arr[2] = 20; // 循环过程中 可以 访问到 arr[2],所以改变能"看到" } for(i of arr) //for-of 循环,遍历所有的值 {      arr[3] = 3; //循环能访问到arr[3] }

obj.forEach(func);      //对obj的每一个元素调用指定函数func ,   iterable对象才有(数组、map等)

  

四.数组对象Array

数组对象  Array,下标是key,

arr = [1,2,3];
arr = new Array(1,2,3);
arr = new Array(length);
Array.map(func):    //对每个元素,调用func映射,返回结果Array.reduce(func):  //累积调用Array.filter(func):  //对每个函数调用func,根据返回结果是true/false,保留/舍弃元素Array.sort(func):  //默认的func,把元素先转化为String,再排序。func(x,y)根据返回值 >0:x>y

五、.字符和字符串:若字符串中有",则用 ‘‘,若有‘,则用" ",若都有,则用转义符 \ 转义

字符:ASCII字符可用\x##代替,Unicode字符,可用\u####代替

"字符‘串“
‘字符"串‘
`可换行字符串`

六、.对象和原型:js中的对象是{key:value} 组成的无序集合,其中key隐式必须是字符串(系统自动加"")

var obj = {
    name:"li",
    age:20  }obj.name  //访问属性的两种方式obj["age"]  //

javascript中没有class的概念,但有构造函数的概念。构造函数格式:

function F(agrs)
{
     this.agrs = args;
     return this;    //系统默认会自动添加这一句,可省略
}

a = new F(params);//用new 调用函数,则当做构造函数使用,this指向新建对象
b = F(params);    //普通调用,this指向全局对象window

构造函数有一个prototype属性,指向另一个对象(叫做原型对象),所有由构造函数构造的对象,都可以共享访问prototype对象的属性和方法

默认情况下:prototype对象是一个当前构造函数的匿名空对象 ,同时  temp有一个constructor属性,指向构造函数(写代码的时候一定要搞清楚这条原型链)  

/*//默认情况下:F.prototyp == temp;temp.constructor == F;*/proto = {}
F.prototype = proto;             //改变了F的prototype对象,而proto.constructor指向的是另一个构造函数(此例中为Object)F.prototype.constructor = F;     //将constructor属性指向当前构造函数,才合乎情理

七、函数对象Function和闭包

function F(args){}                      //无返回值时,返回undefined
var F = function(args){}                //匿名函数对象,赋值给F,F指向函数对象
var result = ( function(x){} )(3)       //创建一个匿名函数并立即执行,实参是3,注意把fun括起来(args)=>{ body; }              //lambda表达式,若只有一个参数,参数括号可省略,若只有一条语句的单表达式,return关键字可省略,默认返回表达式的结果function*G(args){}                      //generator函数:返回多次的函数G.next(args);          //执行第一次,返回结果temp1;G.next(args);      //在temp1的基础上执行第二次,返回结果temp2...递归下去

javascript中的函数很特别,自动就是可变参数:

1.可以传入部分参数,也可以传入多余形参数量的参数:每个函数有一个 arguments 对象,存有实参列表

2.自己手动获取可变参数:function F(arg1, ...args);

3.每个函数,其实都是某个对象内部的方法,全局函数是全局对象window的方法,函数都有this指针,指向它的当前对象

4.函数内部可以再定义函数(因为函数本身也是一个对象),内部函数可以访问外部函数的变量,实现闭包结构

function outFun(n)
{
    var x = n;
    function inFun()
    {
          return x+1;      //内部函数访问外部函数的变量
    }
    return inFun;         //将函数当做对象返回
}

fi = outFun(5);        //这时候,fi = inFun(5),惰性求值,并没有运行inFun函数,同时inFun持有的"outFun.x" 数据  被返回到 外部了,这种情况叫”闭包“var result = fi()    //当调用返回的函数时,才真正的进行了计算, return 5+1 

5.函数对象的两个方法:apply、call:

//将函数临时绑定到对象上,
//apply的参数必须是Array形式[],call的参数是按顺序传入
//若是普通函数,obj=null
fun.apply(obj,args[]);   //指明函数应用到哪个对象上,
fun.call(obj,args)   ;

 

八、正则表达式:

具体语法见其他博客,仅说明如何使用javascript的正则表达式

var reg = /xxx/;	     //不用考虑转义问题
var reg = new RegExp("xxx")     //要考虑转义问题
/xxx/g ==new RgeExp("xxx",g);     //g 全局匹配模式,每运行一次exec,更新lastIndex,下一次exec就从lastIndex开始匹配,,i模式表示忽略大小写

reg.test(str)              //判断str是否能被匹配
reg.exec(str)              //对str匹配,并返回 按分组匹配后 的数组对象,注意元素[0]是group(0)即整个reg匹配结果
str.split(reg)             //str按reg分割为数组

  

时间: 2024-10-05 11:11:34

javascript学习笔记(1)-类型、的相关文章

javascript学习笔记---ECMAScript-判断变量类型

判断类型之前,先要清楚有哪些类型. (理理思路:程序由数据和方法构成,数据由简单数据和复杂数据构成) 即类型有: 数据(简单数据:boolean,string,num,undefined,null.复杂数据:object), 方法(function) 万能的typeof,神一样的方法 typeof(1);// num typeof("hello");// string   typeof(false);// boolean var vFlag; typeof(vFlag);// unde

javascript学习笔记---ECMAScript语法(引用类型)

引用类型通常叫做类(class). 本教程会讨论大量的 ECMAScript 预定义引用类型. 引用类型 引用类型通常叫做类(class),也就是说,遇到引用值,所处理的就是对象. 本教程会讨论大量的 ECMAScript 预定义引用类型. 从现在起,将重点讨论与已经讨论过的原始类型紧密相关的引用类型. 注意:从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现"类"这个词.ECMAScript 定义了"对象定

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一

javascript学习笔记---ECMAScript语法(辅助)

1.区分大小写. test与Test变量是两个不同的变量 2.变量是弱变量. 与C,java等等语言变量不是很一样. 如下java代码 ? 1 2 3 4 int i =0; //再次赋值 i = 10;//ok i = "hello";//wrong 类型不匹配 javascript ? 1 2 3 4 var i = 9; //再次赋值 i = 10;//ok i = "hello";//ok 但是不建议这么干,如此会给开发造成干扰,不明确变量的类型.(变量命名

javascript学习笔记---ECMAScript语法(变量)

变量声明关键字var: var i = 1: var t = "asd"; var test1 = "hi", test2 = "hello"; 声明变量不一定要初始化, var i;//ok 另一方面在使用变量前若未加关键字var,则此变量为全局变量(此特性需特别记住). 变量名字: 变量名需要遵守两条简单的规则: 第一个字符必须是字母.下划线(_)或美元符号($) 余下的字符可以是下划线.美元符号或任何字母或数字字符 命名变量规则: Came

JavaScript学习笔记【2】表达式和运算符、语句、对象

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 表达式和运算符 语句 对象 表达式和运算符 数组直接量中的列表逗号之间的元素可以省略,这时省略的空位会填充值undefined.元素列表末尾可以留下单个逗号,这时并不会创建一个新的值为undefined元素. 属性访问表达式,.identifier的写法只适用于要访问的属性名称是合法的标识符,并且需要知道要访问的属性的名字.如果属性名称是一个保留字或者包含空格和标识符,或是一个数字(对于数组来说),则必须使用方括号的写法.当属性

JavaScript学习笔记【3】数组、函数、服务器端JavaScript概述

笔记来自<JavaScript权威指南(第六版)> 包含的内容: 数组 函数 服务器端JavaScript概述 数组 数组是动态的:根据需要它们会增长或缩减,并且在创建数组时无须声明一个固定的大小或在数组大小变化时无须重新分配空间. 数组可能是稀疏的:索引不一定要连续的,它们之间可以有空缺. 通常,数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快很多. 数组继承自Array.prototype中的属性,它定义了一套丰富的数组操作方法. 如果省略数组直接量中的某个

javascript学习笔记---ECMAScript运算符(位运算符)

位运算符是在数字底层(即表示数字的 32 个数位)进行操作的. 位运算 NOT 位运算 NOT 由否定号(~)表示,它是 ECMAScript 中为数不多的与二进制算术有关的运算符之一. 位运算 NOT 是三步的处理过程: 把运算数转换成 32 位数字 把二进制数转换成它的二进制反码 把二进制数转换成浮点数 例如: var iNum1 = 25; //25 等于 00000000000000000000000000011001 var iNum2 = ~iNum1; //转换为 11111111

javascript学习笔记---ECMAScript运算符(逻辑运算符)

Boolean 运算符非常重要,它使得程序语言得以正常运行. Boolean 运算符有三种:NOT.AND 和 OR. ToBoolean 操作 在学习各种逻辑运算符之前,让我们先了解一下 ECMAScript-262 v5 规范中描述的 ToBoolean 操作. 抽象操作 ToBoolean 将其参数按照下表中的规则转换为逻辑值: 参数类型 结果 Undefined false Null false Boolean 结果等于输入的参数(不转换) Number 如果参数为 +0, -0 或 N