JavaScript散记

For/In循环

var person={fname:"john",lname:"Doe",age:25};
for(x in person){
  txt = txt +person[x];
}

对象的特性

访问对象属性:
方法一:preson.lastname;
方法二:person["lastName"];
访问对象的方法:
//对象的写法:键值对的形式书写,即使是方法也是方法名:function(){....} 即方法名:方法体
var person = {
firstName:"john",
lastName:"Doe",
id:5566;
fullName:function(){
return this.firstName+" "+this.lastName;
}
}
访问对象的方法:person.fullName();这样会执行方法体;
如果访问方式为:person.fullName;那么此时意味着访问fullName属性,那么键所对应的值会全部返回出来.

方法的特性:

function 方法名(参数1,参数2){
方法体;
return ...
}
简述:参数只有参数名,不需要声明, 如有返回值则写上return,如没有就不写return,其他地方无两样
如果方法中规定的传入参数是三个,那么传入两个或者更少是可以的,但是方法是依次取传入的值的,如果传入的参数大于规定的值那也是可以的,完全没有问题

类型特性:

typeof  "john"     //返回string
typeof  "32.1"     //返回number
typeof  false       //返回boolean
typeof  [1,2,3,4] //返回object
typeof  {name:'john',age:34}  //返回object
typeof NaN         //返回number
typeof new Date()  //返回Object
typeof function(){}   //返回function
typeof null           //返回object
typeof undefined  //返回undefined
type myCar          //返回undefined(如果没有声明,有声明的话返回object)

在JavaScript中null表示什么都没有,null是一个只有一个值的特殊类型,表示一个空对象的引用,例如:
var person = null; typeof person; 此时person的类型为对象
var person = undefined;typeof person 此时类型为undefined
在JavaScript中,undefined是一个没有设置值的变量.
undefined和null的区别

  1. null的类型是对象,undefined的类型是undefined
  2. null === undefined 为false null == undefined 为ture

JavaScript数据类型

在JavaScript中有5种不同的数据类型:
string number boolean object function
三种对象类型Object Date Array
两个不包含任何值的数据类型:
null undefined

constructor属性

"john".constructor //返回函数 String() { [native code] }
(3.14).constructor //返回函数 Number(){ [native code] }
...
可以使用constructor属性来查看对象是否为数组(包含字符串"Array");
function isArray(MyArray){
return myArray.constructor.toString().indexof("Array")>-1;
}

try catch throw

try 语句测试代码块的错误
catch 语句处理错误
throw 语句创建自定义错误

function myFuncton(){
  try{
         var x = document.getElementById("demo").value;
          if(x=="") throw "值为空";
          if(isNaN(x)) throw "不是数字";
          if(x>10) throw "太大";
          if(x<5) throw "太小";
  }catch(err){
          var y = document.getElementById("mess");
          y.innerHTML="错误:"+err+".";
  }
}

JavaScript变量提升

JavaScript中,函数及变量的声明都将被提升到函数的最顶部.
JavaScript中,变量可以在使用后声明,也就是变量可以先使用在声明
例如:

x = 5;//变量x 设置为5;
elem = document.getElementById("demo");//查找元素
elem.innerHTML = x; //在元素中显示x
var  x; //声明x

但是JavaScript的初始化不会提升
例如:

elem = document.getElementById("demo")//查找元素;
elem.innerHTML = x;
var x = 10; ///这时候声明与初始化放在后面了,那么此时elem.innerHTML的值为undefined

注:尽量在头部声明你的变量

switch注意事项:

直接上案例:

var x = 10;
switch(x){
    //这样是不对的,switch语句会使用恒等计算符(===)进行比较,所以是没有效果的
    case "10":alert("hello");//类型不对   
}

浮点型数据使用注意事项

#  JavaScript中的所有数据都是以64位浮点型数据(float)来存储.
# 所有的编程语言,包括JavaScript,对浮点型数据的精确度都很难确定
var x = 0.1;
var y = 0.2;
var z = x+y;    //z不等于0.3
if(z==0.3)      //所以这里逻辑表达式返回的是false
可以用整数的乘除法来解决:
var z = (x*10+y*10)/10;   //z的结果为0.3

JavaScript字符串分行

可以向下面这种方式使用断行语句:
var x = 
"hello world!";
但是,在字符串中直接使用回车换行是会报错的:
var x = "hello
world!";
字符串断行需要使用反斜杠(\)
var x = "hello \
world!";
函数中,return 和所return的内容必须同行,否则会返回undefined;

javascript:void(0)含义

javascript:void(0)中最关键的是void关键字,void是javascript中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值

语法格式:
void func()
javaxcript:void func();
或者
void(func())
javascript:void(func())
以下例子什么都不返回
<a href="javascript:void(0)" >单击此处什么也不会发生</a>
以下示例,在用户点击链接后会显示警告信息
<a href="javascript:void(alert('warning!!!'))"
以下示例a=undefined;
a = void(b=5,c=7);
href="#"与href="javascript:void(0)"的区别
#包含了一个位置信息,默认的锚是top也就是网页的上端.
而javascript:void(0),仅仅表示一个死链接
如果需要用到死链接,那么建议使用javascript:void(0);

函数

分号是用来分隔可执行javascript语句
由于函数声明不是一个可执行语句,所以不以分号结束.
函数表达式:
var x = function(a,b){return a*b};
var z = x(4,3);
此时该匿名函数赋值给x是一条可执行语句,所以需要分号,
该函数实际是一个匿名函数
构造函数Function()
var myFunction = new Function("a","b","return a*b");
var x = myFunction(4,4);
实际上可以不用构造函数,直接:
var myFunction = function(a,b){return a*b}
var x = myFunction(4,4);
在javascript中,很多时候,我们需要避免使用new关键字.
函数提升,
在javascript中,变量的声明以及函数的声明默认都会提升,无论在使用前写函数的声明,
还是使用后写函数的声明都会被提前.不会出现undefined
自调用函数
函数表达式可以自调用
自调用表达式会自调用
如果表达式后面紧跟().则会自动调用
实例:
(function(){
  var x = "hello!!!";  //我将调用自己
})();
函数可作为一个值使用
实例:
function myFunction(a,b){
  return a*b;
}
var x = myFunction(4,3)*2;
函数是对象
在javascript中使用typeof操作符判断函数的类型时返回的是function.
但是javascript函数描述为一个对象更加准确,
javascript中函数有属性和方法
实例:
 function myFunction(a,b){
  return arguments.length;   //该属性返回函数调用过程接收到的参数的个数
}
var txt = myFunction.toString();  //该方法会返回函数的声明;

javascript函数参数

显示参数:在函数定义时列出
隐示参数:在函数调用时传递给函数真正的值
参数规则:

  1. 函数定义时显示参数没有数据类型
  2. 函数对隐示参数没有进行类型检查
  3. 函数对隐示参数没有进行个数检查

默认参数:
如果函数在调用时未提供隐示参数,参数会默认设置为undefined,有时这是可以接受的,但是建议最好为参数设置一个默认值,实例:

function myFunction(x,y){
  if(y==undefined){
    y=0;
  }
}
还有一种更简单的设置默认参数的方式
function myFunction(x,y){
  y = y||0;  //如果y已经定义,则返回y,因为y是true,否则返回0,因为undefined为false.
}

Arguments对象
JavaScript函数有个内置arguments对象.
argument对象包含了函数调用的参数数组
通过这种方式你可以很方便遭到最好一个参数的值

x = findMax(1,12,234,555,325);
function findMax(){
  var i,max = 0;
  for(i=0;i<arguments.length;i++){
    if(arguments[i]>max){
          max = arguments[i];
    }
  }
  return max;
}

值传递:
在函数中调用的采纳红素是函数的隐式参数.javascript隐式参数通过值来传递,函数仅仅只是获取值,如果函数修改从参数的值,不会修改显示参数的初始值(在函数外定义).隐式参数的改变在函数外是不可见的.
对象传递参数:
在javascript中,可以引用对象的值,因此我们在函数内部修改对象的属性就会修改其初始值.修改对象属性可作用于函数外部(全局变量),修改对象的属性在函数外是可见的.

函数调用

使用构造函数调用
function myFunction(arg1,arg2){
this.fullName=arg1;
this.lastName=arg2;
}
var x = new myFunction("john","Doe");
x.firstName;
作为函数方法调用函数:
在javascript中,函数是对象,javascript函数有他的属性和方法.
call()和apply()是预定义的函数方法,两个方法可用于调用函数,两个方法的第一个参数必须是对象本身.
示例:

function myFunction(a,b){
  return a*b;
}
//第一种方法调用
myFunction.call(myObject,10,2);
//第二种方法调用
myArray = [10,2];
myFunction.apply(myObject,myArray);
两个方法都是用了对象本身作为第一个参数,两者的区别在于第二个参数
apply传入的一个参数数组,而call传入的是一个个参数
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容