首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

安卓开发整理

先来一个HelloWorld. XML布局文件 <?xml version="1.0" encoding="utf-8"?> <!--线性布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" /> </LinearLayout> 事件响应代码为将英文修改成中文。 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置屏幕组件需要用的布局 setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.tv); // 修改文本控件的文字 tv.setText("你好,世界"); } } 最后在手机上显示的画面如下 创建第二个页面 在res/layout文件夹下面新建一个xml文件 在res/values的strings.xml文件中添加内容 <resources> <string name="app_name">OCR</string> <string name="text2">Activity Main2</string> </resources> activity_main2.xml的布局内容如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text2" /> </LinearLayout> 在清单文件AndroidManifest.xml文件中添加activity_main2的配置。 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.guanjian.ocr"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.OCR"> <activity android:name=".MainActivity" android:exported="true" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity2" /> </application> </manifest> 在Activity1中添加一个按钮来跳转到Activity2。 <?xml version="1.0" encoding="utf-8"?> <!--线性布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" /> </LinearLayout> 修改MainActivity的Java代码 public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置屏幕组件需要用的布局 setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.tv); // 修改文本控件的文字 tv.setText("你好,世界"); Button button = findViewById(R.id.button); // 给button设定点击事件的侦听 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建一个意图对象 Intent intent = new Intent(); intent.setClass(MainActivity.this,MainActivity2.class); // 实现跳转 startActivity(intent); } }); } } 在Java主目录中创建MainActivity2的响应类。 public class MainActivity2 extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); } } 在手机上的运行效果如下 Activity生命周期 上图的说明可以见以下代码 public class MainActivity extends AppCompatActivity { private static final String TAG = "ning"; /** * 在页面载入的时候最先触发 * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"Activity onCreate"); // 设置屏幕组件需要用的布局 setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.tv); // 修改文本控件的文字 tv.setText("你好,世界"); Button button = findViewById(R.id.button); // 给button设定点击事件的侦听 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建一个意图对象 Intent intent = new Intent(); intent.setClass(MainActivity.this,MainActivity2.class); // 实现跳转 startActivity(intent); } }); } /** * 在页面载入的时候第二个触发 */ @Override protected void onStart() { super.onStart(); Log.d(TAG,"Activity onStart"); } /** * 在页面载入的时候第三个触发,结束时页面可见 */ @Override protected void onResume() { super.onResume(); Log.d(TAG,"Activity onResume"); } /** * 在页面跳转离开的时候触发 */ @Override protected void onPause() { super.onPause(); Log.d(TAG,"Activity onPause"); } /** * 在页面完全消失的时候触发 */ @Override protected void onStop() { super.onStop(); Log.d(TAG,"Activity onStop"); } /** * 从其他页面返回该页面时首次执行 * 然后执行onStart和onResume */ @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"Activity onRestart"); } /** * 从主界面返回安卓桌面的时候触发 */ @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"Activity onDestroy"); } } 当我们打开安卓app的时候会显示日志 D/ning: Activity onCreate D/ning: Activity onStart D/ning: Activity onResume 当我们点击跳转按钮会显示日志 D/ning: Activity onPause D/ning: Activity onStop 当我们从跳转页面返回主界面时会显示日志 D/ning: Activity onRestart D/ning: Activity onStart D/ning: Activity onResume 当我们从主界面返回安卓桌面时会显示日志 D/ning: Activity onPause D/ning: Activity onStop D/ning: Activity onDestroy 当我们点击了跳转按钮立刻返回主界面时会显示日志 D/ning: Activity onPause D/ning: Activity onResume 这里有一个值得说明的地方,当App隐藏于后台的时候,我们启动了非常占用内存的App,比如游戏,此时安卓系统会将该进程杀死释放内存给游戏使用。当我们再次进入该App的时候会显示D/ning: Activity onCreate而不是D/ning: Activity onRestart。这几个触发动作的具体应用如下 onCreate:创建活动,把页面布局加载进内存,进入初始状态。 onStart:开始活动,把活动页面显示在屏幕上,进入了就绪状态。 onResume:恢复活动,活动页面进入活跃状态,能够与用户正常交互,例如允许响应用户的点击动作;允许用户输入文字等等。 onPause:暂停活动,页面进入暂停状态,无法与用户进行正常交互。 onStop:停止活动,页面将不在屏幕上显示。 onDestroy:销毁活动,回收活动占用的系统资源,把页面从内存中清除。 onRestart:重启活动,重新加载内存中的页面数据。 onNewIntent:重用已有的活动实例。 Intent Intent是各个组件之间信息沟通的桥梁,它用于Android各组件之间的通信,主要完成下列工作: 标明本次通信请求从哪里来,到哪里去,要怎么走。 发起方携带本次通信需要的数据内容,接收方从收到的意图中解析数据。 发起方若想判断接收方的处理结果,意图就要负责接收方传回应答的数据内容。 显式Intent:直接指定来源活动与目标活动,属于精确匹配。它有3种构建方式 在Intent的构造函数中指定。 调用意图对象的setClass方法指定。 调用意图对象的setComponent方法指定。 @Override public void onClick(View view) { // 创建一个意图对象,第一种方式 // Intent intent = new Intent(MainActivity.this,MainActivity2.class); // 第二种方式 Intent intent = new Intent(); intent.setClass(MainActivity.this,MainActivity2.class); // 第三种方式 // Intent intent = new Intent(); // 它可以调用第三方的控件,使用包名(字符串)和类名(字符串)来调用 // ComponentName component = new ComponentName(MainActivity.this,MainActivity2.class); // intent.setComponent(component); // 实现跳转 startActivity(intent); } 隐式Intent:没有明确指定要跳转的目标活动,只给出一个动作字符串让系统自动匹配,属于模糊匹配。 现在我们在Activity2的页面中添加如下的布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text2" /> <TextView android:id="@+id/tv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="点击以下按钮将向号码12345发起请求" /> <Button android:id="@+id/btn_dial" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳到拨号页面" /> </LinearLayout> 在Activity2的Java代码中添加 public class MainActivity2 extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); findViewById(R.id.btn_dial).setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_dial: Intent intent = new Intent(); // 隐式跳转到拨号界面 intent.setAction(Intent.ACTION_DIAL); Uri uri = Uri.parse("tel:12345"); intent.setData(uri); startActivity(intent); break; default: break; } } } 运行结果 向下一个Activity传递数据 我们在Activity的主界面的布局文件中添加如下代码 <?xml version="1.0" encoding="utf-8"?> <!--线性布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" /> <TextView android:id="@+id/tv_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="今天天气很晴朗" /> <Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送信息" /> </LinearLayout> 在Activity的Java代码中添加 public class MainActivity extends AppCompatActivity { private static final String TAG = "ning"; private TextView tvSend; /** * 在页面载入的时候最先触发 * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"Activity onCreate"); // 设置屏幕组件需要用的布局 setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.tv); // 修改文本控件的文字 tv.setText("你好,世界"); Button button = findViewById(R.id.button); // 给button设定点击事件的侦听 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 创建一个意图对象,第一种方式 // Intent intent = new Intent(MainActivity.this,MainActivity2.class); // 第二种方式 Intent intent = new Intent(); intent.setClass(MainActivity.this,MainActivity2.class); // 第三种方式 // Intent intent = new Intent(); // 它可以调用第三方的控件,使用包名(字符串)和类名(字符串)来调用 // ComponentName component = new ComponentName(MainActivity.this,MainActivity2.class); // intent.setComponent(component); // 实现跳转 startActivity(intent); } }); tvSend = findViewById(R.id.tv_send); findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this,MainActivity2.class); // 创建一个包裹对象 Bundle bundle = new Bundle(); bundle.putString("request_time", new Date().toString()); bundle.putString("request_context",tvSend.getText().toString()); intent.putExtras(bundle); startActivity(intent); } }); } /** * 在页面载入的时候第二个触发 */ @Override protected void onStart() { super.onStart(); Log.d(TAG,"Activity onStart"); } /** * 在页面载入的时候第三个触发,结束时页面可见 */ @Override protected void onResume() { super.onResume(); Log.d(TAG,"Activity onResume"); } /** * 在页面跳转离开的时候触发 */ @Override protected void onPause() { super.onPause(); Log.d(TAG,"Activity onPause"); } /** * 在页面完全消失的时候触发 */ @Override protected void onStop() { super.onStop(); Log.d(TAG,"Activity onStop"); } /** * 从其他页面返回该页面时首次执行 * 然后执行onStart和onResume */ @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"Activity onRestart"); } /** * 从主界面返回安卓桌面的时候触发 */ @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"Activity onDestroy"); } } 在Activity2中获取意图中的数据放入tv2中。 public class MainActivity2 extends AppCompatActivity implements View.OnClickListener { private TextView tv2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); findViewById(R.id.btn_dial).setOnClickListener(this); tv2 = findViewById(R.id.tv2); // 从上一个页面的意图中获取包裹 Bundle bundle = getIntent().getExtras(); String requestTime = bundle.getString("request_time"); String requestContext = bundle.getString("request_context"); String desc = String.format("收到请求消息:\n请求时间:%s\n请求内容:%s", requestTime,requestContext); tv2.setText(desc); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_dial: Intent intent = new Intent(); // 隐式跳转到拨号界面 intent.setAction(Intent.ACTION_DIAL); Uri uri = Uri.parse("tel:12345"); intent.setData(uri); startActivity(intent); break; default: break; } } } 运行结果 向上一个Activity返回数据 现在我们要回一个信息给到主界面,说今天天气很热。 在Activity2中增加一个按钮,布局文件如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/text2" /> <TextView android:id="@+id/tv_response" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="待返回的消息为:今天天气很热" /> <Button android:id="@+id/btn_response" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送返回信息" /> <TextView android:id="@+id/tv3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:text="点击以下按钮将向号码12345发起请求" /> <Button android:id="@+id/btn_dial" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳到拨号页面" /> </LinearLayout> 现在我们在Activity的主界面的Java代码中就不仅仅是普通的跳转到Activity2了,而是需要注册一个可以等待返回的ActivityResult。跳转的方式也不再是startActivity(intent);注意,以下代码都改成了Lambda表达式的形式,关于lambda表达式的内容可以参考Java函数式编程整理 。 public class MainActivity extends AppCompatActivity { private static final String TAG = "ning"; private TextView tvSend; private ActivityResultLauncher<Intent> register; /** * 在页面载入的时候最先触发 * @param savedInstanceState */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG,"Activity onCreate"); // 设置屏幕组件需要用的布局 setContentView(R.layout.activity_main); TextView tv = findViewById(R.id.tv); // 修改文本控件的文字 tv.setText("你好,世界"); Button button = findViewById(R.id.button); // 给button设定点击事件的侦听 button.setOnClickListener(view -> { // 创建一个意图对象,第一种方式 // Intent intent = new Intent(MainActivity.this,MainActivity2.class); // 第二种方式 Intent intent = new Intent(); intent.setClass(MainActivity.this,MainActivity2.class); // 第三种方式 // Intent intent = new Intent(); // 它可以调用第三方的控件,使用包名(字符串)和类名(字符串)来调用 // ComponentName component = new ComponentName(MainActivity.this,MainActivity2.class); // intent.setComponent(component); // 实现跳转 startActivity(intent); }); tvSend = findViewById(R.id.tv_send); // 注册ActivityResult,并通过回调函数获取返回的信息 register = registerForActivityResult(new StartActivityForResult(), result -> { if (result != null) { Intent intent = result.getData(); if (intent != null && result.getResultCode() == Activity.RESULT_OK) { Bundle bundle = intent.getExtras(); String responseTime = bundle.getString("response_time"); String responseContext = bundle.getString("response_context"); String desc = String.format("收到返回消息:\n返回时间:%s\n返回内容:%s", responseTime,responseContext); tv.setText(desc); } } }); findViewById(R.id.button_send).setOnClickListener(view -> { Intent intent = new Intent(MainActivity.this,MainActivity2.class); // 创建一个包裹对象 Bundle bundle = new Bundle(); bundle.putString("request_time", new Date().toString()); bundle.putString("request_context",tvSend.getText().toString()); intent.putExtras(bundle); register.launch(intent); }); } /** * 在页面载入的时候第二个触发 */ @Override protected void onStart() { super.onStart(); Log.d(TAG,"Activity onStart"); } /** * 在页面载入的时候第三个触发,结束时页面可见 */ @Override protected void onResume() { super.onResume(); Log.d(TAG,"Activity onResume"); } /** * 在页面跳转离开的时候触发 */ @Override protected void onPause() { super.onPause(); Log.d(TAG,"Activity onPause"); } /** * 在页面完全消失的时候触发 */ @Override protected void onStop() { super.onStop(); Log.d(TAG,"Activity onStop"); } /** * 从其他页面返回该页面时首次执行 * 然后执行onStart和onResume */ @Override protected void onRestart() { super.onRestart(); Log.d(TAG,"Activity onRestart"); } /** * 从主界面返回安卓桌面的时候触发 */ @Override protected void onDestroy() { super.onDestroy(); Log.d(TAG,"Activity onDestroy"); } } Activity2中的返回信息的代码如下 public class MainActivity2 extends AppCompatActivity implements View.OnClickListener { private TextView tv2; private final String msg = "今天天气很热"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); findViewById(R.id.btn_dial).setOnClickListener(this); tv2 = findViewById(R.id.tv2); // 从上一个页面的意图中获取包裹 Bundle bundle = getIntent().getExtras(); String requestTime = bundle.getString("request_time"); String requestContext = bundle.getString("request_context"); String desc = String.format("收到请求消息:\n请求时间:%s\n请求内容:%s", requestTime,requestContext); tv2.setText(desc); findViewById(R.id.btn_response).setOnClickListener(this); } @Override public void onClick(View view) { Intent intent = new Intent(); switch (view.getId()) { case R.id.btn_dial: // 隐式跳转到拨号界面 intent.setAction(Intent.ACTION_DIAL); Uri uri = Uri.parse("tel:12345"); intent.setData(uri); startActivity(intent); break; case R.id.btn_response: Bundle bundle = new Bundle(); bundle.putString("response_time",new Date().toString()); bundle.putString("response_context",msg); intent.putExtras(bundle); setResult(Activity.RESULT_OK,intent); // 页面返回跳转 finish(); break; default: break; } } } 运行结果 运行时动态申请权限 安卓系统在6.0之前,只需要在清单文件中去配置权限就可以使用例如手机联系人、短信、相册等需要申请权限的应用。用户在安装的时候会进行提示。在安卓6.0之后不仅仅需要在清单文件中配置这些权限,而且会进行系统弹窗的询问,要使用这些权限需要在用户允许的情况下才可以使用。 Lazy模式 Lazy模式即懒汉式模式,当我们需要用到某个权限功能时才去请求权限。除此之外还有一个Hungry模式,即饿汉式模式,当我们打开App的时候,不管你有没有使用到某个权限功能,它都会对用户进行请求,让用户去一次性通过。 我们在Activity的布局文件中添加两个按钮去读取通讯录和发送短信。 <?xml version="1.0" encoding="utf-8"?> <!--线性布局--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" /> <TextView android:id="@+id/tv_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="今天天气很晴朗" /> <Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送信息" /> <Button android:id="@+id/btn_contact" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="读写通讯录" /> <Button android:id="@+id/btn_sms" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送短信" /> </LinearLayout>

优秀的个人博客,低调大师

Python开发环境pipenv

使用pipenv(官方推荐) pipenv只是一个工具,我们用这个工具来创建虚拟环境;我们用pipenv来创建一个虚拟环境,这个虚拟环境是和项目绑定的,也就是我们每创建一个项目就要创建一个虚拟环境 安装: pip install pipenv 为项目安装独立的虚拟环境 # 进入项目相应的目录以后 pipenv install image.png image.png 启动pipenv 启动 # 在项目目录下执行 pip shell image.png 退出 exit image.png 安装包 pipenv install flask 卸载包 pipenv uninstall flask image.png 查看包之间的依赖关系 pipenv graph image.png 查看虚拟环境的路径 image.png 安装各种包,比如Flask pipenv install flask

优秀的个人博客,低调大师

Web前端开发----JS

JavaScript是世界上最流行的编程语言。 这门语言可用于HTML和web,更可广泛用于服务器、PC、笔记本电脑、平板电脑和智能手机等设备。 JavaScript 是脚本语言 JavaScript是一种轻量级的编程语言。 JavaScript是可插入HTML页面的编程代码。 JavaScript插入HTML页面后,可由所有的现代浏览器执行。 JavaScript很容易学习。 JavaScript:写入 HTML 输出 JavaScript:对事件作出反应 Button:按钮的意思 Onclick事件: Alter函数:弹出对话框 JavaScript:改变 HTML 内容 使用JavaScript来处理HTML内容是非常强大的功能 您会经常看到document.getElementByID("some id")。这个方法是HTML DOM中定义的。 DOM(文档对象模型)是用以访问HTML元素的正式W3C标准。 JavaScript:改变 HTML 样式 改变HTML元素的样式,属于改变HTML属性的变种。 HTML中的脚本必须位于与标签之间。 脚本可被放置在HTML页面的和部分中。 标签 如需在HTML页面中插入JavaScript,请使用标签。 和会告诉JavaScript在何处开始和结束。 和之间的代码行包含了JavaScript: 您无需理解上面的代码。只需明白,浏览器会解释并执行位于和之间的JavaScript。 那些老旧的实例可能会在标签中使用type="text/javascript"。现在已经不必这样做了。JavaScript是所有现代浏览器以及HTML5中的默认脚本语言。 在 或 中引用脚本文件都是可以的。实际运行效果与您在 标签中编写脚本完全一致。 JavaScript通常用于操作HTML元素。 操作HTML 元素 如需从JavaScript访问某个HTML元素,您可以使用document.getElementById(id)方法。 请使用"id"属性来标识HTML元素: JavaScript 语句 JavaScript 语句 JavaScript语句向浏览器发出的命令。语句的作用是告诉浏览器该做什么。 下面的JavaScript语句向id="demo"的HTML元素输出文本"Hello World": document.getElementById("demo").innerHTML="Hello World"; 分号; 分号用于分隔JavaScript语句。 通常我们在每条可执行的语句结尾添加分号。 使用分号的另一用处是在一行中编写多条语句 JavaScript 代码块 JavaScript语句通过代码块的形式进行组合。 块由左花括号开始,由右花括号结束。 块的作用是使语句序列一起执行。 JavaScript函数是将语句组合在块中的典型例子。 下面的例子将运行可操作两个HTML元素的函数: function myFunction() { document.getElementById("demo").innerHTML="Hello World"; document.getElementById("myDIV").innerHTML="How are you?"; } JavaScript 对大小写敏感 空格 JavaScript会忽略多余的空格。您可以向脚本添加空格,来提高其可读性。 对代码行进行折行 您可以在文本字符串中使用反斜杠对代码行进行换行。下面的例子会正确地显示: document.write("Hello \ World!"); JavaScript 是脚本语言。浏览器会在读取代码时,逐行地执行脚本代码。而对于传统编程来说,会在执行前对所有代码进行编译。 变量是存储信息的容器。 JavaScript 变量 与代数一样,JavaScript变量可用于存放值(比如x=2)和表达式(比如z=x+y)。 变量可以使用短名称(比如x和y),也可以使用描述性更好的名称(比如age, sum, totalvolume)。 ·变量必须以字母开头 ·变量也能以$和_符号开头(不过我们不推荐这么做) ·变量名称对大小写敏感(y和Y是不同的变量) 提示:JavaScript语句和JavaScript变量都对大小写敏感。 JavaScript 数据类型 JavaScript变量还能保存其他数据类型,比如文本值(name="Bill Gates")。 在JavaScript中,类似"Bill Gates"这样一条文本被称为字符串。 JavaScript变量有很多种类型,但是现在,我们只关注数字和字符串。 当您向变量分配文本值时,应该用双引号或单引号包围这个值。 当您向变量赋的值是数值时,不要使用引号。如果您用引号包围数值,该值会被作为文本来处理。 例子 var pi=3.14; var name="Bill Gates"; var answer='Yes I am!'; 声明(创建)JavaScript 变量 在JavaScript中创建变量通常称为“声明”变量。 我们使用var关键词来声明变量: var carname; 变量声明之后,该变量是空的(它没有值)。 如需向变量赋值,请使用等号: carname="Volvo"; 不过,您也可以在声明变量时对其赋值: var carname="Volvo"; 您可以在一条语句中声明很多变量。该语句以var开头,并使用逗号分隔变量即可: var name="Gates", age=56, job="CEO"; JavaScript 数据类型 字符串、数字、布尔、数组、对象、Null、Undefined JavaScript 拥有动态类型 JavaScript拥有动态类型。这意味着相同的变量可用作不同的类型: 实例 var x // x为undefined var x = 6; // x为数字 var x = "Bill"; // x为字符串 JavaScript 字符串 字符串是存储字符(比如"Bill Gates")的变量。 字符串可以是引号中的任意文本。您可以使用单引号或双引号: 实例 var carname="Bill Gates"; var carname='Bill Gates'; 您可以在字符串中使用引号,只要不匹配包围字符串的引号即可: 实例 var answer="Nice to meet you!"; var answer="He is called 'Bill'"; var answer='He is called "Bill"'; JavaScript 数字 JavaScript只有一种数字类型。数字可以带小数点,也可以不带: 实例 var x1=34.00; //使用小数点来写 var x2=34; //不使用小数点来写 JavaScript 布尔 布尔(逻辑)只能有两个值:true或false。 var x=true var y=false 布尔常用在条件测试中 JavaScript 数组 下面的代码创建名为cars的数组: var cars=new Array(); cars[0]="Audi"; cars[1]="BMW"; cars[2]="Volvo"; 或者(condensed array): var cars=new Array("Audi","BMW","Volvo"); JavaScript 对象 对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式(name : value)来定义。属性由逗号分隔: var person={firstname:"Bill", lastname:"Gates", id:5566}; Undefined 和 Null Undefined这个值表示变量不含有值。 可以通过将变量的值设置为null来清空变量。 声明变量类型 当您声明新变量时,可以使用关键词"new"来声明其类型: var carname=new String; var x= new Number; var y= new Boolean; var cars= new Array; var person= new Object; JavaScript变量均为对象。当您声明一个变量时,就创建了一个新的对象。 JavaScript 对象 JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。 在JavaScript中,对象是拥有属性和方法的数据。 属性和方法 属性是与对象相关的值。 方法是能够在对象上执行的动作。 举例:汽车就是现实生活中的对象。 汽车的属性: car.name=Fiat car.model=500 car.weight=850kg car.color=white 汽车的方法: car.start() car.drive() car.brake() 汽车的属性包括名称、型号、重量、颜色等。 所有汽车都有这些属性,但是每款车的属性都不尽相同。 汽车的方法可以是启动、驾驶、刹车等。 所有汽车都拥有这些方法,但是它们被执行的时间都不尽相同。 JavaScript 中的对象 在JavaScript中,对象是数据(变量),拥有属性和方法。 当您像这样声明一个JavaScript变量时: var txt = "Hello"; 您实际上已经创建了一个JavaScript字符串对象。字符串对象拥有内建的属性length。对于上面的字符串来说,length的值是5。字符串对象同时拥有若干个内建的方法。 属性: txt.length=5 方法: txt.indexOf() txt.replace() txt.search() 提示:在面向对象的语言中,属性和方法常被称为对象的成员。 本例创建名为"person"的对象,并为其添加了四个属性: 访问对象的属性 访问对象属性的语法是: objectName.propertyName 本例使用String对象的length属性来查找字符串的长度: var message="Hello World!"; var x=message.length; 在以上代码执行后,x的值是:12 访问对象的方法 您可以通过下面的语法调用方法: objectName.methodName() 这个例子使用String对象的toUpperCase()方法来把文本转换为大写: var message="Hello world!"; var x=message.toUpperCase(); 在以上代码执行后,x的值是: HELLO WORLD! JavaScript 函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 JavaScript 函数语法 函数就是包裹在花括号中的代码块,前面使用了关键词function: function functionname() { 这里是要执行的代码 } 当调用该函数时,会执行函数内的代码。 可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由JavaScript在任何位置进行调用。 提示:JavaScript对大小写敏感。关键词function必须是小写的,并且必须以与函数名称相同的大小写来调用函数。 运行的结果 调用带参数的函数 在调用函数时,您可以向其传递值,这些值被称为参数。 这些参数可以在函数中使用。 您可以发送任意多的参数,由逗号(,)分隔: myFunction(argument1,argument2) 当您声明函数时,请把参数作为变量来声明: function myFunction(var1,var2) { 这里是要执行的代码 } 变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。 ----------------------------------------------------------------------------------------- 两次的对比 带有返回值的函数 有时,我们会希望函数将值返回调用它的地方。 通过使用return语句就可以实现。 在使用return语句时,函数会停止执行,并返回指定的值。 语法 function myFunction() { var x=5;return x; } 上面的函数会返回值5。 注释:整个JavaScript并不会停止执行,仅仅是函数。JavaScript将继续执行代码,从调用函数的地方。 函数调用将被返回值取代: var myVar=myFunction(); myVar变量的值是5,也就是函数"myFunction()"所返回的值。 即使不把它保存为变量,您也可以使用返回值: document.getElementById("demo").innerHTML=myFunction(); "demo"元素的innerHTML将成为5,也就是函数"myFunction()"所返回的值。 局部JavaScript 变量 在JavaScript函数内部声明的变量(使用var)是局部变量,所以只能在函数内部访问它。(该变量的作用域是局部的)。 您可以在不同的函数中使用名称相同的局部变量,因为只有声明过该变量的函数才能识别出该变量。 只要函数运行完毕,本地变量就会被删除。 全局JavaScript 变量 在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。 JavaScript 变量的生存期 JavaScript变量的生命期从它们被声明的时间开始。 局部变量会在函数运行以后被删除。 全局变量会在页面关闭后被删除。 JavaScript 运算符 运算符=用于赋值。 运算符+用于加值。 运算符=用于给JavaScript变量赋值。 算术运算符+用于把值加起来。 JavaScript 比较和逻辑运算符 比较和逻辑运算符用于测试true 或 false 比较运算符 比较运算符在逻辑语句中使用,以测定变量或值是否相等。 给定x=5,下面的表格解释了比较运算符: 感谢阅读 喜欢看小编文章的点个订阅或者喜欢!小编每天都会跟大家分享文章,也会给大家提供web前端学习资料。

优秀的个人博客,低调大师

JHipster开发环境安装

这里采用官方推荐的Yarn安装方法,默认操作系统为CentOS 7.4。 1 安装JDK 推荐版本:OpenJDK 1.8.0-64bit。 完整安装说明,请参考这里 2 安装Nodejs 推荐版本: v8.11.3 完整安装说明,请参考这里 3 安装Yarn 推荐版本: v1.7.0 完整安装说明,请参考这里 4 安装JHipster 安装最新版本 目前最新版本: 5.1.0 $ yarn global add generator-jhipster 升级到最新版本 $ yarn global upgrade generator-jhipster 指定版本安装 $ yarn global add generator-jhipster@v5.1.0 可选安装 安装Yeoman $ yarn global add yo 安装Maven 推荐版本: 3.5.4 完整安装说明,请参考这里 参考 如果需要在Mac OS X,Windows上安装,或者Docker安装方式,请参考官网的安装文档:https://www.jhipster.tech/installation/ 你现在的气质里,藏着你走过的路,读过的书,爱过的人。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册