js学习笔记
javacript笔记
根据EC5.0
一共有六种数据类型:
number,string,bool
undefine,null
object(广义的) --->object(狭义的),array,function
前五种叫primitive type,最后一种是complex object
三种判断对象类型的方法:
typeof,instanceof,Object.prototype.toString
typeof 前三类型就是基本类型
typeof undefined 是undefined
typeof null 是 object //因为历史的原因,为了兼容以前的代码,并不表示null是对象
typeof [] 是object
null和undifined的区别:
null表示空值
undefined表示不存在值
实际上,所有数据,都可以被看作广义的对象,或说用对象方式调用
var s = new String("123");//s是object
这六个值是false:undefined,null,0,"",false,NaN
自动分号添加:javascript引擎
错误类型:
最一般的错误类型Eooro
六种错误类型
SystaxError
Reference Error
RangeError
TypeError
URIError
EvalError //EC5中不再出现
函数:
三种声明函数的方法
1、function命令
function print(s) {
console.log(s);
}
2、函数表达式 赋值变量
var print=function(s){
console.log(s);
}
function后不应加函数名,如果加了,只在函数内部有效
3、Function构造函数 //很少人使用
var print=new Function("s","console.log(s)"); //最后一个参数是函数体,之前的参数如果存在,则是函数的参数
var print=Function("s","console.log(s)");
作为第一等公民:函数可以作为其他数据类型一样使用,如可以将函数名赋值给变量和对象的属性,也可以当作参数传入其他函数,或者作为函数的结果返回。也因此,函数会像变量声明一样,获得提升。
使用赋值变量的方式声明函数,会导致,先声明,后赋值。也就是说,变量是提升了,但还未赋值。 因此,当同一个函数使用function命令和变量赋值的方式同时声明的话,js引擎总是会认定赋值语句的定义。
var f = function() {
console.log('1');
}
function f() {
console.log('2');
}
f() // 1
按照ECMA规范,不能在非函数中声明函数,但实际傻瓜,很多浏览器可以运行。但又因为变量提升,本意图使用条件语句判断是否声明,实际上没有效果。因此,要达到条件语句的效果,只能使用函数表达式
函数的属性:
name:函数的名称
length 函数的参数个数
作用域:
区块block本身不构成作用域,因此{}只是用于for,if,while,function等语法结构
因此,作用域只分为两种:全局作用域和函数作用域。
函数作用域内的变量会覆盖全局变量
函数作用域内的变量也同样存在变量提升的现象
函数的参数可以省略,若省略,则其值为undefined
关于传值和传址:
在C#中,如果传递的参数是原始类型(int,float等)或结构体(struct),那么就是传值调用。
如果传递的参数是类(class)那么就是传引用调用。(但是当函数内部给对象整体做改变时,那么,仍旧是传值)
如果传递的参数前有ref或者out关键字,那么就是传引用调用。
在JS中,前两条同样成立。当然,这里的对象是指广义的,即包括对象,函数和数组。
arguments[]对象包含了函数运行时的所有参数
但是arguments虽然很像数组,其实不是数组,而是对象- -! 因此数组的方法如slice和foreach
slice(i,j)方法,如果是数组使用,则从i位置,切割到j位置,返回新的子数组,原先的数组不变。
如果是string使用,也是返回一个新的子字符串,原先的字符串不变。
js学习笔记的更多相关文章
- js学习笔记<拷贝传值,引用传址和匿名函数>
拷贝传值:把一个变量的值拷贝一份,传给了另外一个变量拷贝传值中,两个变量之间没有任何联系,修改其中一个一个变量的值,原来的变量不变. 例: var arr1 = ["张三",24, ...
- Js 赋值传值和引用传址
赋值传值和引用传址 在JavaScript中基本数据类型都是赋值传值,复合数据类型都是引用传址(传地址) 基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中,而复合数据类 ...
- 图解JS的传值与传址
//编程过程中经常会碰到传值,传址的问题!今天的主题就是关于传值.与传址. //先讲讲赋值操作 //下例是原始类型赋值操作 var a=1,b=a,a=2; console.log("a=& ...
- 再谈js传值和传址
js的传值和传址还是真绕,前回文说道 1.值类型是传值的 2.对象和数组是传址的 这两点通过例子的到了证实 然而还有一种情况没有讨论 即 函数的参数的传值和传址 通过实验,在函数中用一个新对象去覆盖传 ...
- JS 学习笔记--9---变量-作用域-内存相关
JS 中变量和其它语言中变量最大的区别就是,JS 是松散型语言,决定了它只是在某一个特定时间保存某一特定的值的一个名字而已.由于在定义变量的时候不需要显示规定必须保存某种类型的值,故变量的值以及保存的 ...
- JAVA传值与传址
要了解JAVA中的传值与传址问题,必要先要了解JVA中的栈内存和堆内存,>>>>点些查看<<<<昨天写的学习记录 栈:基本数据类型.数据的引用变量,这两 ...
- javascript . 05 json的组成、for...in 遍历对象、简单数据类型与复杂数据类型的传值与传址、内置对象
对象字面量 JSON var obj = { aaa :999}; var json={"aaa":999,"bbb":888}; "kay&quo ...
- Python 传值和传址 copy/deepcopy
传值:被调函数局部变量改变不会影响主调函数局部变量 传址:被调函数局部变量改变会影响主调函数局部变量 Python参数传递方式:传递对象引用(传值和传址的混合方式),如果是数字,字符串,元组则传值:如 ...
- 【转】Backbone.js学习笔记(二)细说MVC
文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...
随机推荐
- optparse
Python 有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大 ...
- python print及格式化
print(value,sep=' ',end='\n',file=sys.stdout, flush=False) sep=' '默认空格 print('hello','world') #hello ...
- WPF之自定义控件
1.先定义画刷,一般存为资源字典 格式: <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml ...
- python address already in use
1)找到使用端口的进程pid netstat -lp 2)kill掉pid kill -9 1234
- doT.js学习
doT.js特点是快,小,无依赖其他插件.但是一般和jquery一起使用 官网:http://olado.github.io 使用方法:{{= }} for interpolation{{ }} fo ...
- [转]VS2012 快捷键
Ctrl+E,D ----格式化全部代码 Ctrl+A+K+F Ctrl+E,F ----格式化选中的代码 Ctrl+K+F CTRL + SHIFT + B生成解决方案 Al ...
- asp.net 网页中播放 flash 和flv
需求:在网页中播放powerpoint保存的pps文件和mp4文件 经过查阅:发现网页上直接播放pps文件比较麻烦(office web apps server),所以通过工具,将pps文件转换为sw ...
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- Xcode 常用快捷键
一.Xcode基本快捷键 1.1.新建项目 Shift + CMD + N 1.2.项目中新建文件 CMD + N 1.3.运行 CMD + R 1.4.编译 CMD + B 1.5.停止运行 CMD ...
- WPF 变量绑定实现
最近初学WPF,遇到如控件的内容是动态生成的.这时候就需要变量绑定. 简单写下变量绑定的步骤. 如下面的 例子,TextBlock 的内容是动态的,绑定变量StuName. <TextBlock ...