javascript入门(一)

非零基础学js

前言:

javacript跟java没有丝毫联系,半毛钱关系都没有;而且两种语言的最初的应用场景迥异,语言特性又截然不同,大家不要混为一谈。

如果一定要扯上一些联系,那就打个比方:大家都知道肯德基的汉堡不错,我这里开了个包子铺卖包子,为了增加知名度,打个牌子叫做肯德基包子,当然也没有得到肯德基的任何授权。

事实上也是这么回事,某浏览器厂商让某程序员大牛十天设计出了一个脚本语言,运行在他们的浏览器上,用于产生动态/交互效果;而后为了推广自己的浏览器和这个脚本语言,需要给这个语言起个名字吧,恰好当时java语言正是名气最大的网红,那就借网红个东风吧,姑且叫做javascript。

如今js是真的如日中天,动态语言特性加函数式编程风格,在移动互联网的大环境下,各大互联网公司的推动下,js成为了真正的网红。

说实话,js学习很容易起步,但仅限于一般的编程语言会用的范畴,要想真正走进js的世界,很难

1 变量与数据类型

1.1 动态数据类型

与C、java等静态语言不同,javascript是一种动态类型语言,即变量的类型不是静态的,而是动态的。

那么什么是静态呢,静态有两个特点

* 变量在定义时就已经固定下类型了,比如 int a;这个语句定义了一个变量a,a是int类型的;变量的类型名字十分确定

* 在程序运行过程中,变量的类型不会发生变化,整型的变量不能变成字符型,其实原因在于静态类型语言下,一旦变量定义了,变量的内存结构也就确定下来了。

相对于静态语言,很容易得出动态语言的特点:

* 变量定义时不必固定类型

* 程序运行过程中,变量的类型可以随时改变

//来个小栗子 js的
var i; //定义了一个变量,使用var关键字,不会指明具体类型
i=1; // i赋值为1,i是 number类型
i=‘ab‘; // 同一个1赋值为‘ab‘字符串,i是string类型,i的类型发生了变化

1.2 js的数据类型种类

// 1 string 字符串
var carname="Volvo XC60";
var carname=‘Volvo XC60‘;
// 2 Number 数字 , 不区分整型和浮点型
var x1=34.00;      //使用小数点来写
var x2=34;         // //不使用小数点来写
// 3 布尔类型 boolean
var x=true;
var y=false;
// 4 数组 Array
// 4.1 第一种
var cars=new Array();
cars[0]="Saab";
cars[1]="Volvo";
cars[2]="BMW";
// 4.2 注意,不是大括号,而是小括号,数组元素作为参数传入
var cars=new Array("Saab","Volvo","BMW");
// 4.3 json的方式,最常用的方式
var cars=["Saab","Volvo","BMW"];
var bikes=[];//定义了一个空数组
// 5 对象 object
// 其实跟键值对类似 key:value , value可以为任意类型
// json格式
var person={firstname:"John", lastname:"Doe", id:5566};
//如何引用某元素,有两种方式
name=person.lastname;
name=person["lastname"];
// 6 函数 function
function a(){}; //正常定义函数的方式
var b= function(){ }; // 匿名函数引用的方式
// 7 未赋值的类型 undefined
// 8 空值 null,用于清空对象
// null其实也是对象类型
var dd;
var nn = null;
console.log(typeof dd); //undefined
console.log(typeof nn); // object

用于确定类型的操作符是typeof

 typeof "John"                 // 返回 string
typeof 3.14                   // 返回 number
typeof NaN                    // 返回 number
typeof false                  // 返回 boolean
typeof [1,2,3,4]              // 返回 object
typeof {name:‘John‘, age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (if myCar is not declared)
typeof null                   // 返回 object 

事实上,所有数据类型都是对象,因为js是基于对象的

1.3 js是基于对象的

什么是对象

与java的区别

  • java是OO语言,Object-Oriented,面向对象的,但其实是基于类的。java中要想有对象,必须先有类,先有个对象的概念模型(形式化描述),然后根据这个模型进行实例化,造出一个具体的对象。一句话就是java是先有类,后有对象
  • 而js创建对象则不需要任何模型事先的定义,直接 var a={}就定义了一个a对象,那么a对象有哪些属性呢?可以随时添加

构造器 constructor

构造器 在java中有构造方法的概念,用于初始化对象,js中的对象也有constructor属性,既然js中的变量都是基于对象的,那么每个变量的构造器constructor又是什么呢?

console.log("John".constructor ); // function String() { [native code] }
console.log(1.3.constructor ); // function Number() { [native code] }
console.log(true.constructor ); // function Boolean() { [native code] }
console.log([].constructor ); // function Array() { [native code] }
console.log({}.constructor ); // function Object() { [native code] }
console.log(function(){}.constructor ); // function Function() { [native code] }

JSON数据格式 (进阶学习)

JSON 英文全称 JavaScript Object Notation

js的对象定义的方式,很简洁,很简洁地就描述了一个对象有哪些属性及其内容。在对象描述和程序交互数据时,可以使用xml的方式,而js的这种简洁对象描述也得到程序员的倾慕,于是就出现了一种使用js对象定义的格式的字符串用于描述数据的方式,叫做JSON。

js对JSON的支持体现在【对象】和【JSON文本】之间的转换

* JSON.parse(text) //将text转换为对象

* JSON.stringify(object) // 将object文本化

2 语句

2.1 if语句

凡是程序设计语言都需要有的结构,js同样,没有太大新意,需要注意的就是if(expr)中的expr表达式什么时候是真是假

expr中可以出现各种类型的值,下面分别做出测试

if(0.11) console.log("a"); else console.log("b"); // a
if(1) console.log("a"); else console.log("b"); // a
if(0) console.log("a"); else console.log("b"); // b
if("a") console.log("a"); else console.log("b"); // a
if("") console.log("a"); else console.log("b"); // b
if(‘‘) console.log("a"); else console.log("b"); // b
if(false) console.log("a"); else console.log("b"); //b
if([]) console.log("a"); else console.log("b");//a
if({}) console.log("a"); else console.log("b");//a
if(undefined) console.log("a"); else console.log("b");//b
if(null) console.log("a"); else console.log("b");//b

结论是,数字0、空字符串、null、undefined、布尔false都为假

注:空数组和{}这种对象(只要不是null的对象)也是真的

2.2 for循环

同样只说特殊用法

* for循环可以用于遍历对象属性,for..in..的方式

var car={
    color:"white",
    type:"jetta",
    run:function(){console.log("run run run")}
}
//输出所有属性
for(var x in car)
    console.log(x + ": "+car[x]);
/* color: white
 type: jetta
 run: function (){console.log("run run run")} */

//如果不输出类型为方法的属性,则如下
for(var x in car){
    if(typeof(car[x])!=‘function‘)
        console.log(x + ": "+car[x]);
}

3 常用内置对象

3.0.1 基本介绍

常用内置对象有Number String Date Array Math RegExp

其中,Math是个对象,其余的都是方法,或者叫做function对象。

console.log(typeof Number);//function
console.log(typeof String);//function
console.log(typeof Array);//function
console.log(typeof Date);//function
console.log(typeof RegExp); //function
console.log(typeof Math); //object

弄懂这点有什么意义呢?

如果是function对象的话,可能就是构造方法,事实上确实如此,Number String Date Array RegExp可以用来作为对象构造器(构造函数)来用,即可以用来生成新的属于该类型的对象

下文介绍的各内置对象,一般会说明两块内容:属性和方法,其中属性一般适用于内置对象,而方法适用于使用对象构造器构造出来的对象

3.0.2 prototype 原型属性

原型对象有点类似于java中类的概念,当使用对象的prototype属性进行增加对象属性或方法时,会作用于所有的该原型的对象

var i = new Number(18);
var j = new Number(19);
console.log(i["a"]);
console.log(j["a"]);
Number.prototype.a = "hello";
console.log(i["a"]);
console.log(j["a"]);
//error ******
i.prototype.a = "hello" ;//Uncaught TypeError: Cannot set property ‘a‘ of undefined

事实上,prototype这个属性适用于所有的对象构造器,比如

function foo(a){
    this.a=a
}
var a = new foo("c");
foo.prototype.b="dd";
console.log(a.b);

3.1 Number对象

3.1.1 数字类型和数字对象

数字类型和数字对象的区别,与java中int与Integer的区别有些类似

var x = 123;
var y = new Number(123);
typeof(x) // returns Number
typeof(y) // returns Object

3.1.2 Number对象(function对象)的属性

  • NaN 用于表示非数值
  • MAX_VALUE 可表示最大的值
  • MIN_VALUE
  • constructor 生成Number对象的方法
  • prototype 用于给Number构造的对象添加属性和方法的对象

3.1.3 Number构造的对象的方法

  • toFixed(x) 转换成带有x小数的字符串
  • toPrecition(x) 转换成x长度(不包含小数点)的字符串
  • toString(x) 转换成x进制的字符串 相当好用
  • valueOf() 转换成number类型

3.2 String对象

3.2.0 string类型与String对象

这两个在js中做过特殊处理,方法可以通用

3.2.1 对象属性 length 长度

3.2.2 对象方法

  • 字符串内查找

    charAt indexOf lastIndexOf search(可用regexp) match(匹配)

//没有注释上结果,懒得写了 , match很重要
var str="hello world world";
console.log(str.charAt(1));
console.log(str.indexOf("wo"));
console.log(str.lastIndexOf("wo"));

console.log(str.search(/wo/)); //6 

var ma = str.match(/wo/g);
console.log(typeof ma);
console.log(ma.length);
console.log(ma);
  • 替换

    replace 两个需要注意的地方:1)可以用正则表达式 2)不会更改原始字符串

var str="hello world world";
var cc = str.replace(/world/,"cc");
var dd = str.replace(/world/g,"dd");
console.log(str); // hello world world
console.log(cc); // hello cc world
console.log(dd); //hello dd dd
  • 获取子串

    slice ~ substring , substr(start,len)

var str="hello world";
console.log(str.slice(1,3)); // el
console.log(str.substr(1,3)); // ell
console.log(str.substring(1,3));//el

console.log(str.slice(1)); // ello world
console.log(str.substr(1)); // ello world
console.log(str.substring(1));//ello world

console.log(str.slice(-1)); // d
console.log(str.substr(-1)); // d
console.log(str.substring(-1));//hello world

console.log(str.slice(-1,3)); // ""
console.log(str.substr(-1,3)); // d
console.log(str.substring(-1,3));//hel

*大小写转换

toLowerCase toUpperCase 注:不会改变原字符串

var str="hello WORLD";
var lower = str.toLowerCase();
var upper = str.toUpperCase();
console.log(str);
console.log(lower);
console.log(upper);

3.3 Date对象

3.1 创建对象

  • new Date() // 当前日期和时间
  • new Date(milliseconds) //返回从 1970 年 1 月 1 日至今的毫秒数
  • new Date(dateString)
  • new Date(year, month, day, hours, minutes, seconds, milliseconds)

3.2 主要方法

注意:getDay getMonth获得的是从0开始的

方法 说明
getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。
getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6) 第一天是周日sunday。
getFullYear() 从 Date 对象以四位数字返回年份。
getHours() 返回 Date 对象的小时 (0 ~ 23)。
getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。
getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。
getMonth() 从 Date 对象返回月份 (0 ~ 11)。
getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。
getTime() 返回 1970 年 1 月 1 日至今的毫秒数。

3.4 Array对象

  • Array对象与[]数组类型的方法通用

主要方法

  • 查找子元素

    indexOf lastIndexOf

var arr=[‘a‘,‘b‘,‘a‘];
console.log(arr.indexOf(‘a‘));//0
console.log(arr.lastIndexOf(‘a‘));//2
  • join数组元素串联,形成大的字符串
var arr=[‘a‘,‘b‘,‘a‘];
console.log(arr.join()); //a,b,a
console.log(arr.join("-"));//a-b-a
  • 改变数组内容

    • push append ,return length
    • pop return last ,delete
    • shift return first,delete
    • unshift insert at first, return len
    • splice return (index,len),delete, add
var arr=[‘a‘,‘b‘,‘c‘];
console.log(arr.push(‘d‘));//4
console.log(arr); // a,b,c,d
console.log(arr.pop()); // d
console.log(arr);//a,b,c
console.log(arr.shift());//a
console.log(arr);//b,c
console.log(arr.splice(1,1,"e","f"));//c
console.log(arr);//b,e,f
console.log(arr.unshift("g"));//4
console.log(arr);//g,b,e,f
  • sort排序 reverse反转顺序
var arr=[‘a‘,‘b‘,‘a‘];
console.log(arr.sort()); //a,a,b
console.log(arr.reverse());//b,a,a
  • every,some 对数组元素是否满足条件进行判断
var arr=[‘a‘,‘b‘,‘a‘];
function hasA(e){
    return e==‘a‘;
}
console.log(arr.every(hasA)); // false
console.log(arr.some(hasA)); //true
  • filter 过滤元素,生成新数组
var arr=[‘a‘,‘b‘,‘a‘];
function isA(e){
    return e==‘a‘;
}
console.log(arr.filter(isA).length)
console.log(arr.filter(isA))
  • map 对每个元素处理,并生成新的数组
var arr=[‘a‘,‘b‘,‘c‘];
function wrap(a){
    return "<h1>"+a+"</h1>";
}
console.log(arr.map(wrap));
console.log(arr);

3.5 RegExp对象

3.5.1 创建正则表达式对象

  • var patt=new RegExp(pattern,modifiers);
  • var patt=/pattern/modifiers; 简单方式
3.5.1.1 修饰符
  • i 忽略大小写
  • g 全局匹配
3.5.1.2 范围内字符
表达方式 内容
[abc] 查找方括号之间的任何字符。
[^abc] 查找任何不在方括号之间的字符。
[0-9] 查找任何从 0 至 9 的数字。
[a-z] 查找任何从小写 a 到小写 z 的字符。
[A-Z] 查找任何从大写 A 到大写 Z 的字符。
[A-z] 查找任何从大写 A 到小写 z 的字符。
[adgk] 查找给定集合内的任何字符。
[^adgk] 查找给定集合外的任何字符。
(red blue
3.5.1.3 元字符
表达方式 内容
. 查找单个字符,除了换行和行结束符。
\w 查找单词字符。
\W 查找非单词字符。
\d 查找数字。
\D 查找非数字字符。
\s 查找空白字符。
\S 查找非空白字符。
3.5.1.4 量词
表达方式 内容
n+ 匹配任何包含至少一个 n 的字符串。
n* 匹配任何包含零个或多个 n 的字符串。
n? 匹配任何包含零个或一个 n 的字符串。
n{X} 匹配包含 X 个 n 的序列的字符串。
n{X,Y} 匹配包含 X 或 Y 个 n 的序列的字符串。
n{X,} 匹配包含至少 X 个 n 的序列的字符串。
n$ 匹配任何结尾为 n 的字符串。
^n 匹配任何开头为 n 的字符串。

3.5.2 正则表达式对象的方法

  • exec 检索
  • test 测试是否存在
var str = "word o WORD";
var reg = /WO\w*/ig;
console.log(reg.exec(str)); //wo
console.log(reg.test(str)); //true

3.5.3 字符串中支持regexpr的方法

表达方式 内容
search 检索与正则表达式相匹配的值。
match 找到一个或多个正则表达式的匹配。
replace 替换与正则表达式匹配的子串。
split 把字符串分割为字符串数组。

杂项

  • js是大小写敏感的,跟C、java类似,即变量a与变量A不一样
  • js中语句后面的分号是可以省略的。
  • > 但强烈建议不要省略,因为编译器会悄悄地把分号加进来,有时候编译器程序并没有那么智能,可能自动添加的分号破坏程序逻辑。
  • var是用于声明(定义)变量的关键字,将变量声明到当前作用域中;如果不用var,则变量自动成为全局变量 《- 这点十分重要,可惜有道笔记的markdown语法不支持颜色
  • 关系运算==,会自动进行类型转换,比如 5==’5’的结果是true
  • 关系运算===,进行“绝对等于”,比如5===’5’会先对比类型,结果是false
时间: 2024-10-08 09:08:49

javascript入门(一)的相关文章

JavaScript入门:005—JS基本语句

JS的基本语句如下.主要看看循环语句和选择语句.循环语句1.for循环 for(var i=1;i<100;i++){ //代码 } 2.do...while循环 var i = 0; do { i++; //代码 }while(i<100); 3.遍历 var array = new Array(); array[0] = "你懂的"; array[1] = "over"; array[2] = "呵呵"; array[3] = &

Javascript入门视频教程

1,第一节 http://pan.baidu.com/play/video#video/path=%2F%E6%95%99%E5%AD%A61.mov&t=-1 2,第二节 http://pan.baidu.com/play/video#video/path=%2FJavascript%E6%95%99%E7%A8%8B2.mov&t=-1 Javascript入门视频教程,布布扣,bubuko.com

JavaScript入门学习书籍的阶段选择

对于许多想学习 JavaScript 的朋友来说,无疑如何选择入门的书籍是他们最头疼的问题,或许也是他们一直畏惧,甚至放弃学习 JavaScript 的理由.在 JavaScript 方面,自己不是什么专家,也不是什么高手,但自己一路走来,JavaScript 从迷茫到认识,对于JavaScript 书籍的认识或许还有些借鉴价值.入门推荐首选书籍:<JavaScript DOM 编程艺术>当初读了不下 4 遍,书内容简单,易学,上手快,编程思想严谨.好的入门书,对你未来的编程都会有着深远的影响

&lt;javascript入门&gt;基本语法

<javascript入门>基本语法一.什么是javascript?javascript语言有什么特点?脚本语言的特点?    1.如果说css是给html页面进行化妆装饰以使html页面更加美观漂亮,那么javascript就是对html中DOM树上的节点进行增删改以使html页面实现动态的效果.    2.javascript语言是一种基于面向对象的.弱类型的.平台无关性的.安全性的语言.之所以说javascript基于面向对象是说它不是一种纯粹的面向对象,而是需要面向对象时即面向对象,需

JavaScript入门:001—概述

关于JavaScript JavaScript针对html页面进行交互行为:JavaScript是脚本语言,解释执行的:JavaScript可以直接嵌入html页面,也可以是个.js文件加载到html页面执行: JavaScript是免费的. JavaScript的作用 JavaScript是为html页面提供的编程工具 即使不是程序员也可以使用javascript进行页面的设计和美化,只需写一段javascript程序即可.JavaScript能响应事件 在html元素上设置一个事件,当事件被

JavaScript入门--慕课网学习笔记

 JAVASCRIPT-(慕课网)入门篇 我们来看看如何写入JS代码?你只需一步操作,使用<script>标签在HTML网页中插入JavaScript代码.注意, <script>标签要成对出现,并把JavaScript代码写在<script></script>之间. <script type="text/javascript">表示在<script></script>之间的是文本类型(text),ja

02.JavaScript入门基础

一.JavaScript数据结构: 标识符(变量名和函数名) JavaScript语言中标识符最重要的3点就是: (1)第一个字符必须是字母.下划线(_)或美元符号这3种其中之一,其后的字符可以是字母.数字或下划线.美元符号: (2)变量名不能包含空格.加号.减号等符号: (3)标识符不能和JavaScript中用于其他目的的关键字同名: .关键字(JavaScript关键字是指在JavaScript语言中有特定含义,成为JavaScript语法中一部分的那些字) .常量(常量的指从定义开始就是

LEADTOOLS HTML5&amp;Javascript 入门笔记

TODO:待编辑 将HTML5 / JavaScript查看器控件添加到HTML文档 <head> <script type="text/javascript"> run: function SiteLibrary_DefaultPage$run() { // Create the viewer var createOptions = new Leadtools.Controls.ImageViewerCreateOptions('imageViewerDiv'

JavaScript入门:003—JS中的变量

编程语言都是相同的,JS中也是有变量的.首先JS的变量是区分大小写的,这个需要注意,比如number和Number是不同的变量.不管是常用类型的,还是对象类型,比如 Object obj和Object Obj是两个对象.然后是对变量赋值,这个基本都一样,可以先声明再赋值, var i; i=0; 也可以声明时赋值, var i=2; 而变量如果你不重新赋值,它是不会改变的,比如 var i=2: var i; 因为i没有重新赋值,所以i还是2.而对于对象变量则比较有意思,不需要向那些java,c

JavaScript入门基础

JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运算符(+,-,*,/,++,--,%).比较运算符(>,<,<=,>=,==,===,!=,!==).逻辑运算符(||,&&,!).条件运算(?:).位移运算符(|,&,<<,>>,~,^)和字符串运算符(+). 可能很多人不知道&quo