js学习笔记(一)

一.变量声明

js中的变量是松散类型,所谓松散类型就是可以用来保存任何类型的数据。在js中,声明变量同其他语言一样,我们使用var操作符,后跟变量名:

var isNumber;(js中未初始化的值都会保存为特殊的值 --undefined)

有一点必须注意,用var声明的变量将会成为定义该变量的作用域中的局部变量,也就是说,如果在函数中使用var声明一个变量,那么这个变量将会在函数退出后销毁。如果是全局变量,将在浏览器退出时销毁,因此,在实际代码中,我们应尽量减少全局变量的使用。

关于变量,有几个比较容易迷惑的地方:

function fn(){
   var  name=‘lili‘
};
fn();
alert(name)     //js会抛出错误

function other(){
  name=‘lili‘
}
other();
alert(name)   //‘lili‘

在变量声明中,如果省略var ,则默认为全局变量。

var s=‘name‘;
function test(){
  alert(s);     //‘undefined‘
  var  s=‘aage‘;
  alert(s)    //‘aage‘
}
test();

JavaScript引擎在执行的时候,当前作用域内的声明都会提升到作用域的最前面,包括变量和函数的声明,但很明显在第一个alert执行的时候,虽然声明被提升,但是此时赋值并没有执行,因此第一个alert的值为undefined(如果函数内无变量s的声明,则会到下一个作用域即全局作用域查找)。

二.变量类型

js中有5种简单数据类型(基本数据类型):undefined,null,boolean,number,string。还有一种复杂数据类型,object,object是由一组无序的名值对组成的。在js中,一切皆对象,这是后话。

对于数据类型的检查,js中提供了typeof操作符,通过对数据进行typeof操作,则会返回相应类型的字符串。如alert(typeof (undefined)===‘undefined‘)//true.

一.undefined

一般我们可以根据一个值是否等于undefined来判断其是否定义或存在。

二.null

关于null,需要注意两个地方,一是typeof null 会返回‘object’,二是alert(undefined==null)会返回true。在实际代码中,我们可以通过将对象设为null来清除对象。

三.boolean

boolean总共包含两个值,true与false,要将一个值转化为boolean值,可以调用boolean()函数。

关于对应表如下:

数据类型 转化为true的值 转化为false的值
string 非空字符串 空字符串
number 非零数字值 0或NaN
object 任何对象 null
undefined ----- undefined

四.number类型

常见的有浮点数,整数,NaN。

js浮点数值得最高精度为17位小数,但一般js浮点数的计算经常会出现误差,据说js并非独此一家,其他语言也有类似问题,而且js浮点数的需要内存空间为整数值得2倍。在js中可以通过isNaN来返回值是否为NaN.

数值转化的方法有3个:Number(),parseInt(),parseFloat(),其中后两种比较常用。

其中每个函数都有各自的转化规则,详见如下代码:

//number转化函数
console.log(Number(‘hello world‘));  //NaN
console.log(Number(‘‘));             //0
console.log(Number(‘00011‘));        //11
console.log(Number(true));           //1
console.log(Number(undefined));      //NaN
console.log(Number(null));           //0

//parseInt
console.log(parseInt(‘1234ajdkfe‘));    //1234
console.log(parseInt(‘ ‘));              //NaN
console.log(parseInt(‘0xA‘));             //10   十六进制
console.log(parseInt(‘22.5‘));            //22.5

//parseFloat
console.log(parseFloat(‘1234ajdkfe‘));   //1234
console.log(parseFloat(‘22.5‘));          //22.5
console.log(parseFloat(‘22.5.34‘));        //22.5
console.log(parseFloat(‘0908.5‘));         //908.5

大多数情况下,console.log要比alert更好用,不影响程序的执行,还可以随时查看执行结果。

五.string类型

当定义string字符类型变量时,一定要用单引号或双引号,否则js便会报错,导致程序的中断。

把其他类型的值转化为字符串有toString和string方法,具体规则如下:

//toString方法
var age = 23;
console.log(age.toString())    //‘23‘
var flag=false;
console.log(flag.toString())    //‘false‘
var number=10;
console.log(number.toString())  //‘10‘
console.log(number.toString(2)) //‘1010‘
console.log(number.toString(8))  //‘12‘
console.log(number.toString(16))  //‘a‘

//string
var value1=10;
var value2 = true;
var value3=null;
console.log(String(value1)) //‘10‘
console.log(String(value2)) //‘true‘
console.log(String(value3)) //‘null‘

六.object类型

我们可以通过var obj=new Object()     或   var obj={}来创建对象

var person = new Object();
person.name=‘micro‘;
person.age = 23;

var person={
    name:‘mirco‘,
    age:23
}

可以通过上述两种方法来实例化对象,第二种成为对象字面量,看起来更像是封装,注意,在最后一个属性后面添加逗号,会在ie7或其他版本导致错误。

访问对象的属性可以用点访问法或方括号语法,在使用方括号语法时,应该将要访问的属性以字符串的形式放在方括号中,方括号语法最大的优势是可以通过变量来访问属性;

如下:

var sn=‘name‘;
var re=‘place‘;
var o={};
o.sn=‘mike‘;
o[re]=‘beijing‘;
console.log(o)   //Object {sn: "mike", place: "beijing"}

我们原意是为对象添加name及place属性,使用点属性不支持变量属性,而方括号是可以的。这在数组对象操作中经常会用到。

时间: 2024-08-03 07:19:47

js学习笔记(一)的相关文章

Vue.js学习笔记:在元素 和 template 中使用 v-if 指令

f 指令 语法比较简单,直接上代码: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.2.

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Angular JS 学习笔记

特定领域语言 编译器:遍历DOM来查找和它相关的属性, 分为编译和链接两个阶段, 指令:当关联的HTML结构进入编译阶段时应该执行的操作,可以写在名称里,属性里,css类名里:本质上是函数 稳定的DOM:绑定了数据模型的DOM元素的实例不会在绑定的生命周期发生改变 作用域:用来检测模型的改变和为表达式提供执行上下文的 AngularJS 和其它模板系统不同,它使用的是DOM而不是字符串 指令: 由某个属性.元素名称.css类名出现而导致的行为,或者说是DOM的变化 Filter过滤器:扮演着数据

Node.js学习笔记(3) - 简单的curd

这个算是不算完结的完结吧,前段时间也是看了好久的Node相关的东西,总想着去整理一下,可是当时也没有时间: 现在看来在整理的话,就有些混乱,自己也懒了,就没在整理,只是简单的记录一下 一.demo的简单介绍 这次demo,只涉及到简单的curd操作,用到的数据库是mongo,所以要安装mongo数据库,数据库连接驱动是mongoose: 当然关于mongo的驱动有很多,比如mongous mongoskin等:(详见http://cnodejs.org/topic/4f4ca8e0940ce2e

JS学习笔记-OO疑问之封装

封装是面向对象的基础,今天所要学习的匿名函数与闭包就是为了实现JS的面向对象封装.封装实现.封装变量,提高数据.系统安全性,封装正是面向对象的基础. 匿名函数 即没有名字的函数,其创建方式为 function(){...} 单独存在的匿名函数,无法运行,可通过赋值给变量调用或通过表达式自我执行来实现运行. 1.赋值给变量为一般的函数使用方式 var run = function(){ return '方法运行中'; }; alert(run()); 2.通过表达式自我执行 (function(a

每日js学习笔记2014.5.4

<script language="javascript">var mystring = "这是第一个正则表达式的例子";var myregex = new RegExp("这是"); //创建正则表达式if (myregex.test(mystring)) //test的功能是查找字符串中是否有匹配项,有则返回true,没有则返回false{ document.write ("找到了指定的模式");}else{

每日js学习笔记2014.5.5

<script language="javascript"><!-- var textstr = prompt("请输入一个字符串:",""); //prompt的用法,包含两个参数 var regex = /[A-Z][a-z]tion/; //[A-Z]有无匹配项 var result = regex.test(textstr); //test的用法 document.write ("<font size='

JS学习笔记-OO疑问之对象创建

问一.引入工厂,解决重复代码 前面已经提到,JS中创建对象的方法,不难发现,基本的创建方法中,创建一个对象还算简单,如果创建多个类似的对象的话就会产生大量重复的代码. 解决:工厂模式方法(添加一个专门创建对象的方法,传入参数避免重复) function createObject(name,age){ var obj =new Object(); //创建对象 obj.name = name; obj.age = age; obj.run = function(){ return this.nam

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE